【发布时间】:2010-10-24 04:31:29
【问题描述】:
客观的 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) 如果上面是正确的,那么retain属性只有在setter调用正确的时候才会增加retain count?
3) 我在某些地方听说过在对象自己的初始化程序中调用对象的 setter 方法是不好的。为什么?对我来说,如果你这样做不好,那么你就必须这样做:
NSString *b = [someOtherString retain];
考虑到您使用b 制作了一个属性,这似乎很奇怪。
4) 在上面的UITableViewCell 示例中使用@property (retain, readonly) SomeObject *t; 也令人困惑。 “readonly”表示没有合成吸气剂。如果我对“保留”的理解是正确的(即它只发生在 setter 中),那么这似乎真的很矛盾。
【问题讨论】:
标签: objective-c retain