B
에 하위 클래스 화하여 새 기능으로 수퍼 클래스 A
의 메소드를 확장하고자합니다. 인스턴스 변수의 기본값은 @protected
이므로 액세스하는 것이 좋습니다. 그러나 A
메서드에서 만든 인스턴스 변수 x
에 대한 변경 내용은 B
에 반영되지 않으며 그 반대의 경우도 마찬가지입니다.Objective-C 인스턴스 변수의 상속 이해
@interface A : NSObject {
X *x;
}
- initWithX:(X *)anX;
@end
@implementation A
- initWithX:(X *)anX
{
assert(anX != nil);
if (self = [super init]) {
x = anX;
}
assert(self != nil);
return self;
}
@end
@interface B : A
@end
@implementation B
- initWithX:(X *)anX
{
assert(anX != nil);
if (self = [super initWithX:anX]) {
assert(x != nil); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< FAILS
}
return self;
}
@end
어떻게 A
과 B
사이의 변수 x
을 공유 할 수 있습니까?
그런데 프로덕션 코드에는 사용자가 assert()를 사용하지 마십시오. 최소한, NSAssert를 사용하십시오. NSAssert는 디버그에서 어설 션 (assert)까지 컴파일되고 릴리스에서 지워질 것입니다. –
http://www.manicwave.com/blog/2009/10/30/defensive-programming-and-the-role-of-assertions/ – Etan
http://vgable.com/blog/2008/12/04/ nsassert-considered-harmful/ – Etan