我有这样的财产:
@property(nonatomic,retain) NSString *porpertyList;
@synthesize porpertyList = _porpertyList;
- (void)dealloc
{
[_porpertyList release];
}
如果我这样做_porpertyList = @“”;在我的应用程序中财产被释放?
//被修改 现在我不明白我什么时候应该使用这个@synthesize porpertyList = _porpertyList; ?
答案 0 :(得分:2)
取决于您使用的内存模型。如果您正在使用ARC,则无需编写dealloc来释放保留的属性,这是为您完成的。如果您不使用ARC,则需要释放保留属性的变量:
- (void) dealloc {
[_propertyList release];
[super dealloc];
}
这里有两点需要注意:
[super dealloc];
答案 1 :(得分:2)
如果您访问此属性
self.property=@"";
你实际上正在使用setter方法(由于@synthesize而自动创建)。因此,在这种情况下,旧对象被释放,新对象被分配和保留。
如果您使用
合成了您的财产@synthesize property= _property;
然后如果你打电话
_property=@"";
然后您只需为该属性分配新值。当时没有任何东西被释放。
因此,在您的dealloc
方法中,您有一些选择:
-(void)dealloc
{
self.property=@"";//old value released, new value is @""
self.property=nil;//old value released, new value is nil
[_property release]; //old value released
[super dealloc];
}
答案 2 :(得分:1)
@synthesize porpertyList = _porpertyList;
每当你合成一个属性时......你的保留计数增加1 ..这就是你在dealloc中释放的原因。
Using self.propertyList = something
和
porpertyList = something
是非常不同的东西,使用属性时应避免使用后者。 这就是porpertyList = _porpertyList; 的原因所以你没有使用propertyList而不是self.porpertyList
原因是...... popertyList是一个指针..
当你self.porperty = something
时..你为自己制作一个单独的副本(不是@“”)
但是如果你做popertyList =某事......你会指向另一个对象,从而弄乱它最初的整个保留计数,这会使你的程序表现得很奇怪..
答案 3 :(得分:0)
如果对变量名使用@property
选项,则应使用
self.propertyList = @""
而不是_propertyList = @""
。使用self.propertyList
将释放它在分配给它时使用的任何先前的内存
答案 4 :(得分:0)
_porpertyList = @""
不会发布任何内容。如果要发布,可以使用self. porpertyList = nil
。这将正确释放它。