2011-09-24 2 views
0

다른 클래스에서 ivar를 사용하는 경우 @property (noatomic, retain) 및 @synthesize를 사용합니다. 그리고 이걸보기에 추가합니다. 레이블은 ivar입니다.해당 클래스에서만 사용되는 ivar을 할당 할 때 필요한 임시 변수입니까?

UILabel *aLabel = [UILabel alloc] initWithFrame:frame]; 
self.label = aLabel; 
[aLabel release]; 
[self.view addSubview:label]; 

다른 클래스에서 사용하지 않으면 @property 및 @synthesize를 사용하지 않습니다. 그리고 이걸보기에 추가합니다.

label = [UILabel alloc] initWithFrame:frame]; 
[self.view addSubview:label]; 

맞습니까?

답변

0
label = [UILabel alloc] initWithFrame:frame]; 
[self.view addSubview:label]; 

정확하지만 위험합니다. label의 이전 값이 nil이면 괜찮습니다. 이전에 label이 다른 값을 가졌다면, 이는 이전에 label에 의해 지시 된 객체를 해제하지 않았기 때문에 메모리 누수입니다. 그러나 그 객체는 나중에 하나의 참조가 없으며, 아마도 참조가 남아 있지 않을 수도 있습니다.

속성은 다른 클래스에서 사용하지 않더라도 유용합니다. 그러나 그들은 요구되지 않습니다.

0

네,하지만 첫 번째 예제의 마지막 줄

[self.view addSubview:self.label]; 
+0

어때? label.text = @ "test"; self.label.text = @ "test";를 사용해야합니까? – user698200

+0

속성 만 사용하는 경우 자기를 사용해야합니다. 예. – edc1591

0

예는, 할당 해제의 해제를 잊지 말고해야한다. 속성은 주로 클래스 외부의 값에 액세스 할 수있게하는 데 필요합니다. 본질적으로 메소드, getter 및 setter는 값을 통과합니다. 유지 및 복사 속성은 값을 유지하거나 복사본을 만듭니다. 너무 자주 self.property = value를 설정하고 명시 적으로 유지하고 이전 값을 릴리스 할 필요가 없기 때문에 무언가를 유지해야 할 경우 코드를 단순화하는 데 자주 사용됩니다.

0

두 경우 모두 @property을 사용해야합니다. 차이점은 공개하기를 원하지 않는 경우 @property 정의를 비공개 확장으로 이동해야한다는 것입니다. 예를 들어, 다음과 같은 pubNameprivName 속성을 고려하십시오. 그들은 공개 또는 (초기화 및 할당 해제 제외) 개인인지

// MYObject.h -- Public Interface 
@interface MYObject : NSObject 
@property (nonatomic, readwrite, retain) NSString *pubName; 
@end 

// MYObject.m 

@interface MYObject() // Private Interface 
@property (nonatomic, readwrite, retain) NSString *privName; 
@end 

@implementation MYObject 
@synthesize pubName=pubName_; 
@synthesize privName=privName_; 

- (void)dealloc { 
    [pubName_ release]; 
    [privName_ release]; 
} 

당신은 항상 모든 속성에 대한 접근을 사용해야합니다. 일관되게 이렇게하면 메모리 관리 실수에 대한 최선의 방어가됩니다 (누출 및 충돌로 이어짐).

관련 문제