2011-06-14 6 views
3

어떻게하면 dealloc 부울 값을 얻을 수 있습니까? 호환되지 않는 포인터가 '무효 *'아마도부울 값의 Objective-c dealloc

- (void)dealloc { 
    self.booleanVar = nil; 
    [super dealloc]; 
} 

내가 명확히해야한다, 이것은이다에서 'BOOL'(일명 '서명 문자')에 할당 변환을 정수하는이 방법은 아래를 Deallocing

나에게 경고를 제공 NSObject에서 상속받은 간단한 클래스에서.

저는 Cocoa Touch 클래스에서 볼 수있는 self.var = nil 패턴을 사용하고 있습니다. dealloc 메서드에서 self.var = nil 또는 [var release]를 사용해야한다면 NSString *이라고 가정 해 봅시다. 나는 약간 혼란스러워.

답변

10

당신은 그것을 할 필요가 없습니다. 아니요 개체입니다. 이것은 또한 Nil 포인터 (기본적으로 객체에 대해서는 NULL 임)를 비 객체에 할당하려고 할 때 경고를 설명합니다.


두 번째 질문에 대해서는 예. 원시 변수를 객체의 일부로 생각할 수 있으므로 할당이 해제되면 더 이상 변수가 존재하지 않게됩니다.

하지만 개체에 NSString *이 있으면 다른 개체에 대한 포인터 일뿐입니다. 이전 주소를 할당 해제하면 NSString이 아닌 포인터가 삭제됩니다. 아무도 그것을 지적하지 않을 수 있습니다, 그것은 일종의 공기를 잃어버린 기억을 차지하고 있습니다. 따라서 포인터를 삭제하기 전에 개체가 더 이상 필요하지 않으면 해제 메시지를 보냅니다. dealloc 메소드에서 "delete"와 객체를 호출했기 때문에 dealloc 메소드에서 수행되었습니다. 따라서 더 이상 사용하지 않는 객체를 모두 삭제할 수있는 좋은 장소입니다.

2

BOOL은 실제로는 원시 데이터 형식 인 바이트이기 때문에 BOOL을 dealloc 할 필요가 없습니다. 메모리에 할당 된 객체 만 dealloc하면됩니다. booleanVar 그냥 일반 BOOL 값이 경우 모든

0

첫째, 그것은과 같이 선언에서 같이

BOOL booleanVar; 

은 다음과 연결된 메모리를 확보 할 필요가 없습니다, 그 메모리이기 때문에 그것을 보유하고있는 클래스가 할당되고 할당 해제 될 때 할당되고 해방된다. 따라서 dealloc에서 booleanVar에 대한 코드는 문제가되지 않습니다. 당신과 같이 정의 BOOL에 대한 포인터에 대해 이야기하는 경우

그러나 :

BOOL *booleanVar; 

하고 당신이 원하는 것은 아닌 값이 변수를 설정하는 것입니다, 당신은 NULL로는 동일하게 설정해야 nil 대신 NULL은 값 포인터이고 nil은 개체 포인터입니다 (NULL vs nil in Objective-C 참조). 당신이 원하는 무엇을 malloc 또는 realloc 등으로 할당 된 것을 BOOL 포인터가 가리키는 메모리를 확보 할 경우

그러나, 다음 free() C 함수를 (: http://www.cplusplus.com/reference/clibrary/cstdlib/free/ 참조)보십시오.

클래스 인터페이스에서 booleanVar에 대한 속성 선언을 보여 주면 정확히 무엇을 할 수 있겠습니까? 그러면 정확히 무엇을하고 싶은지 알려주고 전체적인 정확도로 답을 얻을 수 있습니다.