Objective-C의 속성 및 인스턴스 변수에 대해 다소 혼란 스럽습니다.Objective-C의 속성 및 인스턴스 변수
저는 Aaron Hillegass의 "Mac OS X 용 Cocoa Programming"의 중간 단계입니다. 모든 것이 논리적입니다.
다른 물체가 우리의
name
및items
인스턴스 변수를 조작해야하기 때문에
, 우리는 그들에게 접근/뮤 테이터를 생성하는@class Something; @interface MyClass : NSObject { NSString *name; NSArray *items; Something *something; IBOutlet NSTextField *myTextField; } @property (nonatomic, retain) NSString *name; @property (nonatomic, retain) NSArray *items;
@property
/@synthesize
를 사용 :이 같은 클래스 뭔가를 선언 할 것입니다. 클래스 내에서는 접근 자/변형자를 사용하지 않고 인스턴스 변수와 직접 상호 작용합니다.something
은 우리 클래스에서 사용할 인스턴스 변수 일 뿐이며, 아무도 사용하지 않아도되므로 한 쌍의 접근 자와 mutator를 만들지 않습니다.UI의 텍스트 필드와 상호 작용해야하므로
IBOutlet
을 선언하고 연결하면 완료됩니다.
매우 논리적입니다.
그러나 iPhone 세계에서는 상황이 달라 보이는 것 같습니다. 사람들은 모든 단일 인스턴스 변수에 대한 속성을 선언하고 IBOutlets
의 속성을 선언하고 접근 자/변경자를 사용하여 클래스 (예 : name = @"Test"
이 아닌 [self setName:@"Test"]
)을 클래스 내에서 상호 작용합니다 (예 :).
왜? 무슨 일 이니? 이러한 차이점이 iPhone에만 해당합니까? 모든 인스턴스 변수의 속성을 선언하고 IBOutlets
의 속성을 선언하고 자신의 클래스에서 접근 자/변경자를 사용하면 어떤 이점이 있습니까?
처럼 쓸 수 있습니다 : 아래의 답변뿐만 아니라, http://stackoverflow.com/questions/1221516/does-an-iboutlet-needs- 참조 IBOutlets을 속성으로 선언하는 이유에 대해서는 http://stackoverflow.com/questions/1250518/what-happens-if-i-dont-retain-iboutlet을 참조하십시오. –