如果其他类使用了ivar,我使用@property(noatomic,retain)和@synthesize。 我将它添加到这样的视图中。标签是ivar。
UILabel *aLabel = [UILabel alloc] initWithFrame:frame];
self.label = aLabel;
[aLabel release];
[self.view addSubview:label];
但是如果其他类没有使用它,我不使用@property和@synthesize。 我将它添加到这样的视图中。
label = [UILabel alloc] initWithFrame:frame];
[self.view addSubview:label];
我是对的吗?
答案 0 :(得分:0)
是的,但第一个例子的最后一行应该是
[self.view addSubview:self.label];
答案 1 :(得分:0)
是的,不要忘记在dealloc发布。属性主要是允许从类外部访问值的必要条件。本质上是方法,一个getter和一个传递值的setter。保留和复制属性还可以保留值或复制它。因此,如果您需要保留某些内容,它们通常用于简化代码,因为您可以简单地设置self.property = value,而不需要显式保留它并释放以前的值。
答案 2 :(得分:0)
在这两种情况下都应该使用@property
。不同之处在于,如果您不想将其公开,则应将@property
定义移动到私有扩展中。例如,请考虑以下pubName
和privName
属性。
// MYObject.h -- Public Interface
@interface MYObject : NSObject
@property (nonatomic, readwrite, retain) NSString *pubName;
@end
// MYObject.m
@interface MYObject () // Private Interface
@property (nonatomic, readwrite, retain) NSString *privName;
@end
@implementation MYObject
@synthesize pubName=pubName_;
@synthesize privName=privName_;
- (void)dealloc {
[pubName_ release];
[privName_ release];
}
然后,您应该始终对所有属性使用访问器,无论它们是公共还是私有(init和dealloc除外)。持续这样做是防止内存管理错误的最佳方法(导致泄漏和崩溃)。
答案 3 :(得分:0)
label = [UILabel alloc] initWithFrame:frame];
[self.view addSubview:label];
这可能是正确但危险的。如果标签的先前值为零,那就没问题了。如果label之前有一个不同的值,那么这就是内存泄漏,因为你没有释放先前由label指向的对象,但之后该对象只有一个引用,可能没有引用。
属性对于类似的东西很有用,即使它们没有被其他类使用。但是它们不是必需的。