Objective-C에서 한 개체를 다른 개체의 속성으로 사용하는 경우 @synthesize
을 사용하면 개체가 자동으로 초기화됩니까?다른 객체의 합성 속성 인 경우 객체가 자동으로 초기화됩니까?
답변
여전히 초기화해야합니다.
-(MyPropertyClass*)propertyName {
if(!propertyIvarName) {
_propertyIvarName = [[MyPropertyClass alloc] init];
}
return propertyIvarName;
}
을하거나 @synthesize는 초기화하는 방법을 알고하지 않습니다 viewdidload
이 패턴은 속성을 nil로 설정할 수 없기 때문에 위험 할 수 있습니다. –
여러 스레드에서 속성을 호출하면 문제가 발생할 수도 있습니다. –
'viewDidLoad'는보기가 아닌 것들에는 적용되지 않습니다 ... – Dave
번호의 속성을 초기화하기 : 게으른 초기화를 사용해보십시오. 간단한 -init
?
참조 개체의 -init…
에 할당하고 초기화 할 수 있습니다.
@synthesize
을 사용하면 자동으로 초기화됩니까?
가 네,이 nil
으로 초기화된다 (실제 객체가 가 할당되지, 그러나 -이 단어의 C의 의미에서 포인터 초기화되면, init
메서드가 호출 하지입니다). 모든 인스턴스 변수, 심지어 해당 @property
이없는 것들, 자동 (객체의 경우) 중 하나 nil
으로 초기화되어, NULL
-
, 당신도이 동작을 달성하기 위해 @synthesize
필요 없어 (다른 포인터의 경우) 또는 0
(정수 및 부동 소수점의 경우) Objective-C 런타임에 의해 수행됩니다.
의 그것을 시도하자
@interface TypicalObject : NSObject
@property (nonatomic) NSNumber *numberProperty;
@end
@implementation TypicalObject
@synthesize numberProperty;
@end
...
TypicalObject *object = [[TypicalObject alloc] init];
NSLog(@"object.numberProperty = %@", object.numberProperty);
로그 문 수율 :
object.numberProperty = (null)
그래서, 아니, 속성은 자동 인스턴스화하지 않습니다. 그러나 모든 오브젝트 인스턴스 변수는 nil
으로 시작합니다.
개체를 포인터로 저장해야합니다.이 포인터는 'nil'로 초기화됩니다. – Dave