如何制作自定义UIView setter。例如:
1)我们创建属性:
@property (retain) IBOutlet UILabel *myLabel
2)我们制作setter(与@synthesize相同):
- (void)setMyLabel:(UILabel *)anObject
{
[myLabel release];
myLabel = [anObject retain];
}
是否正确,或者我应该检查新视图是否与当前的视图
不同- (void)setMyLabel:(UILabel *)anObject
{
if(anObject != myView){
[myLabel release];
myLabel = [anObject retain];
}
}
只是myView和anObject是对象指针。那么我们应该用-isEqual方法检查它们吗?或者我们根本不需要检查它? @synthesize默认生成什么代码?
感谢。
答案 0 :(得分:2)
只有第二个版本(带有if
语句)才正确。在您的第一个版本中,假设anObject
和myLabel
实际上指向同一个对象(即指针是相同的)。在这种情况下,您将释放该对象,如果没有其他对象保留它,则会导致该对象被释放。随后保留解除分配对象的尝试将导致崩溃。