我仍然是Objective-C编码的新手(正如这个问题所证明的那样),我想我并不完全理解在@property声明中如何使用retain属性.
这是一个示例类:
@interface Foo : NSObject {
NSMutableArray *myArray;
}
@property (retain) NSMutableArray *myArray;
Run Code Online (Sandbox Code Playgroud)
我的理解是,加入保留属性为@property申报(并使用在实现文件进行必要的@synthesize delcaration)将基本上做到以下setter和getter对我来说:
- (void)setMyArray:(NSMutableArray *)newArray {
myArray = [[NSMutableArray alloc] initWithArray:newArray];
[newArray release];
}
- (NSMutableArray *)myArray {
return myArray;
}
Run Code Online (Sandbox Code Playgroud)
这是准确的还是我误解了retain属性的工作原理?
添加retain属性实际上会生成以下代码:
- (void)setMyArray:(NSMutableArray *)newArray {
[newArray retain];
[myArray release];
myArray = newArray;
}
- (NSMutableArray *)myArray {
return myArray;
}
Run Code Online (Sandbox Code Playgroud)
在旧值上发布之前在newArray 上调用retain方法的原因是,如果newArray和myArray是同一个对象,则数组将在再次保留之前被释放.
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |