我有一些初次问题:
1)使用@propreties和@synthesize时,是否需要在dealloc方法中执行某些操作?或者没必要? (比如发布或其他东西)
2)我有类似的东西:
@property (copy, nonatomic) NSString *model; // On prend une copie pour le setter
@property (getter=getDistance, nonatomic) float odometer;
// constructeur doit toujours commencer par init
-(id)initWithModel:(NSString *)newModel {
if(self = [super init]) {
_model = [newModel copy];
_odometer = 10.0;
}
return self;
}
我可以这样做:
self.model = [newModel copy];
self.odometer = 10.0;
这有什么区别?
3)为什么,对于NSString *,我们使用copy属性?
@property(**copy**) && _variable = [newVariable **copy**] ..
4)对于一个简单的应用程序(非多线程),我们可以使用非原子来获得最佳性能吗?
提前致谢
答案 0 :(得分:1)
retain
和copy
属性,必须释放支持变量,或者必须在nil
中将属性设置为-dealloc
,除非您使用ARC。 -init
方法中使用访问者。不同之处在于您的版本直接设置了支持变量,绕过了@synthesize
d访问者的任何副作用(包括内存管理!)。但是,我应该指出,如果你不使用ARC,self.model = [newModel copy];
会泄漏内存。如果您不使用ARC,请将其替换为self.model = [[newModel copy] autorelease];
。这是两者之间差异的完美示例:_model = [newModel copy];
没有泄漏。NSString
有一个可变的子类,所以你不想retain
传递给你的字符串,只是发现它后来发生了变异,你不知道!相反,请为自己制作一份副本,以确保它不会被外部物体搞砸。atomic
。