2012-07-10 3 views
3
@interface ClassA : UITableViewController { 

    NSString *member; 
} 

@end 

회원은 상기와 같이 선언됩니다.Obj-C에서 @property를 사용하여 멤버를 정의 할 때 멤버에게 값을 전달할 때 수행 할 작업은 무엇입니까?

내가 회원이 astring을 유지합니다

NSString * astring = [[NSString alloc] initWithString:@"???"]; 
member = astring; 

을 사용하는 경우?

+0

ARC를 사용하고 있는지 여부는 언급해야합니다. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html – ChrisH

+0

@CHrisH . – jeswang

답변

2

아니요 보유하지 않습니다. 이것은 인스턴스 varaible (iVar이라고도 함)입니다. 이전 개체를 해제하지 않고 새 개체를 유지하지 않습니다 (setter의 일반적인 선언 된 속성).

// [self setMember : aString]에 해당하는 속성 집합 self.member = aString; //이 있으면 이전 값이 해제되고 retain (또는 속성 선언에 따라 복사) 메시지가 aString으로 전송됩니다.

if iVar member = aString // 메모리 관리가 없습니다.

+0

오, 알겠습니다. 한 가지 더 묻습니다. @property (nonatomic, copy)를 사용하면 멤버는 astring을 복사하고 astring이 변경되면 멤버는 영향을받지 않습니까? – jeswang

+0

예 당신이 맞습니다 – msk

+0

ARC를 사용한다면 컴파일러가이 두 접근법의 최종 메모리 관리를 상당히 비슷하게 할 수 있습니다 (하지만 ivars와 속성 사이의 구분은 잘 이루어져 있습니다). – Stew

1

수행 한 작업은 인스턴스 변수 ("ivar"라고도 함)로 선언되고 문자열로 지정되었습니다. 변수 자체에 을 할당하면 문자열이 유지되지 않지만 예에서 할당 한 문자열의 보유 수는 1입니다.

ARC를 사용하는지 여부에 따라 문자열이 범위 끝에서 해제됩니다. ARC를 사용하지 않는 경우 문자열을 직접 릴리스해야합니다. 즉, 정확한 경우 astring은 결코 해제되지 않을 문자열 리터럴이므로 메모리 관리는 관련이 없습니다.

+0

** 감사합니다 **. 나는 재산이없는 회원을 어떻게 행동하는지 이해하지 못합니다. 나는 나 자신에 의해 천천히 풀어 줘야한다는 것을 안다. – jeswang

+0

[메모리 관리 안내서] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html)를 살펴보십시오. 유지/릴리스에 대해 자세히 설명합니다 –