我的理解是应该直接从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。
答案 0 :(得分: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]
。)