0

我的理解是应该直接从init方法内部访问实例变量。例如:

@interface ABC : NSObject

     @property (strong, nonatomic) NSString *name;

@end

@implementation ABC

- (id)init
{
    if ((self = [super init]) != nil)
    {
        _name = @"some name";
    }
}

// another init example

- (id)initWithName:(NSString*)n
{
    if ((self = [super init]) != nil)
    {
         _name = n;
    }
}

@end

我想知道这个_name变量。在这两个init示例中,是否_name保留?对于此示例,我使用的是 ARC。

4

1 回答 1

1

是否_name保留在此代码中取决于您是否打开了ARC。如果您这样做,ARC 将为您保留该对象(因为这是 ARC 的工作)。如果您没有打开 ARC,则需要自己保留它,如下所示:

- (id)initWithName:(NSString*)n
{
    if ((self = [super init]) != nil)
    {
         _name = [n retain];
    }
}

(还值得指出的是 NSStrings 通常应该被复制而不是保留,所以你可以创建属性@property (copy, nonatomic) NSString *name;并且赋值是_name = [n copy].)

于 2014-04-16T19:35:30.127 回答