在Objective-c中继承实例变量

前端之家收集整理的这篇文章主要介绍了在Objective-c中继承实例变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Objective-c 2.0中为什么子类需要使用self关键字引用父类中的实例变量? @H_404_2@考虑这个例子:

// a.h
@interface MyClass : NSObject
@property (nonatomic,retain) Object *myObject;
@end

// a.m
@implementation MyClass
@synthesize myObject;
@end


// b.h
@interface AnotherClass : MyClass
@end

// b.m
@implementation AnotherClass
- (void) someMethod {
    // error
    // Object *obj = myObject;

    // works
    // Object *obj = self.myObject;
}
@end

解决方法

您实际上没有定义一个变量,您只定义了一个属性(隐式定义了一个非私有变量).由于属性只是方法,您需要点语法.请注意,self.property与[self property]相同. @H_404_2@要解决这个问题,请指定一个变量.我会给你一个例子,其中变量的名称属性不同.大多数人都选择了同一个名字,但我喜欢让他们有所不同,所以我马上看到哪一个是意思.

// a.h
@interface MyClass : NSObject {
    // Instance variables are "protected" by default,except if you
    // use @private or @public.
    Object *myObjectVar;
}

@property (nonatomic,retain) Object *myObject;
@end

// a.m
@implementation MyClass
@synthesize myObject = myObjectVar;
@end


// b.h
@interface AnotherClass : MyClass
@end

// b.m
@implementation AnotherClass
- (void) someMethod {
    // works
    Object *obj = myObjectVar;

    // works
    obj = self.myObject;

    // the same as self.myObject
    obj = [self myObject];
}
@end
@H_404_2@注意分配时的区别:如果分配给变量,对象不会自动保留.但是如果您使用该属性,它将被保留:

myObjectVar = someObject; // not retained,old object not released!
self.myObject = someObject; // old object released,new object retained
[self setMyObject:someObject]; // same as the line above
@H_404_2@编辑:提到合成的实例变量默认是私有的,如@Jason Coco所指出的.而@NSGod是正确的,正常的实例变量是默认而不是公共的,固定的.

猜你在找的C&C++相关文章