客观的 C 文档说关于属性中的保留属性:
保留 指定在分配时应在对象上调用保留。(默认为分配。)先前的值被发送释放消息。
UITableViewCell
我以为我理解了属性和属性,直到我在参考指南中看到这样的内容:
@property(nonatomic, readonly, retain) UIImageView *imageView
然后读到上面真的让我很困惑。
我的问题:
1)假设我有:
@interface SomeClass: NSObject {
NSString *b;
}
@property (nonatomic,retain) NSString *b;
@end
然后在实现文件中:
@implementation SomeClass
@synthesize b;
- (id) initWithSomeString(NSString *c) {
if (self = [super init]) {
b = c;
}
}
@end
这不会增加“b”指向的对象的保留计数对吗?我现在对此感到困惑,因为目标 C 文档说:
保留 指定在分配时应在对象上调用保留。(默认为分配。)先前的值被发送释放消息。
2)如果以上是正确的,那么当setter被调用正确时,retain属性只会增加retain count?
3) 我在某些地方听说过在其自己的初始化程序中调用对象的 setter 方法是不好的。为什么?对我来说,如果你这样做不好,那么你必须这样做:
NSString *b = [someOtherString retain];
考虑到您已经从b
.
4)在上面的例子中也有@property (retain, readonly) SomeObject *t;
类似的东西。UITableViewCell
“readonly”表示没有合成吸气剂。如果我对“保留”的理解是正确的(即它只发生在二传手中),那么这似乎真的很矛盾。