2011-03-24 3 views
3

무엇이 RELEASE_SAFELY 또는 RELEASE_CF_SAFELY입니까? 좋습니다, 물건을 내놓는 데 사용하지만 왜 [obj release]을 사용하지 않으시겠습니까?RELEASE_SAFELY의 의미는 무엇이며 xcode4에서 작동하지 않는 이유는 무엇입니까?

Undefined symbols for architecture i386: 
    "_RELEASE_SAFELY", referenced from: 
     -[AdressBookModel search:] in AdressBookModel.o 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status 

내가 대신 [obj release]을 수행 할 수 있습니다 내가 엑스 코드 4를 사용하려하지만 buid 오류로 실행하고 게다가

? 너는 무엇을 고려 하겠는가?

답변

4

RELEASE_SAFELY 함수하지만 매크로 아니고, 일반적으로 다음과 같이 정의된다 :

#define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; } 

(나는 그것이 SDK의 일부가 아니지만 별도로 각 프로젝트에 선언 할 수 있다고 생각 그리고 내가하지 않습니다. 이 Xcode의 버전과는 아무 상관이있다 생각합니다.)

그래서 먼저을 해제 호출 한 후 추가로 전무에 변수를 설정합니다. 이는 이중 릴리스 또는 할당 취소 된 인스턴스에 대한 액세스를 방지하기 때문에 좋은 방법입니다.

코드가 매크로 대신 함수라고 생각하는 것 같습니다. 아마 컴파일러는 선언되지 않았 음을 경고합니다.

해결 방법은 위의 매크로 정의를 적절한 헤더 파일에 넣는 것입니다.

관련 문제