2011-12-14 2 views

답변

1

잘 작동하는 동안 @synthesize은 ivar을 만듭니다. 디버거에서 ivar을 볼 수 없다는 부작용이 있습니다. 잘만되면 애플은이 성가신 문제를 다룰 것이다.

3

컴파일러가 자동으로 ivar를 생성 할 수 있습니다. 구현 파일에서

이 같은 찾아야 다음 아이바 이름이 속성 이름에서 다르기 때문에

@synthesize array; 

또는

@synthesize array = _array; 

내가 두 번째 경우를 선호을, 그래서 당신이 강제로 사용하기

self.array = anArray; 

이와 비슷한 내용은 컴파일되지 않습니다.

array = anArray; 

ivar 이름이 _array이므로.

가독성이 낮은지 묻는다면 제게는 그렇지 않습니다. 나는 자동 ivars 세대를 선호한다.

비교 : 더 나은 (더 쉽게 이해하는) 나를 위해

#import <UIKit/UIKit.h> 
@interface fubar : NSOjbect { 
    NSArray *array 
} 

@property (nonatomic, retain) NSArray *array; 

@end 

덜 코드 :

#import <UIKit/UIKit.h> 
@interface fubar : NSOjbect 

@property (nonatomic, retain) NSArray *array; 

@end 

이와 (I이 경우 그들이 필요하지 않기 때문에 중괄호를 제거).

+0

네,이 예제에서와 같이 어떤 ivar도 갖고 있지 않으면 제거 할 수 있습니다. – Krokodylowy

0

속성은 인스턴스 변수가 아니므로 간단한 대답입니다.

속성은 원하는 경우 인스턴스 변수를 설정하거나 가져올 수있는 한 쌍의 setter/getter 메서드이지만 반드시 필요하지는 않습니다.

속성을 합성하면 (즉, 컴파일러에서 자동으로 setter 및 getter를 만들도록) 인스턴스 변수가 존재하지 않으면 컴파일러에서 해당 변수를 만듭니다.