2010-07-02 2 views
0

누구나 [self.property release][property release]의 차이점을 말할 수 있습니까? 나는이 응용 프로그램의보기 컨트롤러 중 하나에서 [self.property release]을 수행하고 탐색 컨트롤러에이보기 컨트롤러를 밀어 넣을 때이보기 컨트롤러를 표시 할 때 오류가 EXC_BAD_INSTRUCTION 인 것을 보여 주지만 내가 할 때는 [property release] 모든 것이 잘 작동하기 때문에 묻습니다 ...? 어느 곳에서 내가 잘못 될 지 알려줄 수 있습니까? 나는 아이폰 앱 개발에 익숙하지 않다.[self.property release]와 [property release]의 차이점

답변

3

[속성 릴리스]는 속성 인스턴스 변수에 릴리스 메시지를 보내고 거의 원하는 작업입니다.

[self.property release]는 self.property에서 반환 한 객체에 릴리스 메시지를 보냅니다. 이 결과는 속성이 assign/copy/retain으로 정의되어 있는지 여부에 따라 달라 지므로 기본적으로 사용자가 생각하는 것과 다른 개체를 릴리스 할 것입니다.

+0

감사합니다 roger ... 답장을 ... – user347161

+2

getter 접근자는 개체의 복사본을 반환하지 않지만 누가 그 복사본을 만듭니다. 따라서 getter 접근 자에게 릴리스를 보내면 ivar에 릴리스를 보내는 것과 동일한 의미가됩니다. 이 대답을 잘못 부른다면 ... – Moszi

4

self.myProperty은 인스턴스 변수 myProperty의 접근 자 메서드입니다. 접근 방법은 다음

@property (retain) Type* myProperty; 

[myProperty release]; 
myProperty = nil; 
(키가 유지 인) 당신이 접근을 정의한 가정 @synthesize에 의해 생성되는, 또는 그래서

-(Type*) myProperty; 
-(void) setMyProperty:(Type*)p; 

명시 적으로 정의 할 수 있습니다

self.myProperty = nil; 

일반적으로 해제 된 개체를 실수로 사용하려고 시도하지 않도록 설정하는 것이 좋습니다.

[self.property release]으로 연락 할 이유가 없습니다.