如何制作自定义 UIView setter。例如:
1) 我们创建属性:
@property (retain) IBOutlet UILabel *myLabel
2) 我们创建 setter(与 @synthesize 将创建的相同):
- (void)setMyLabel:(UILabel *)anObject
{
[myLabel release];
myLabel = [anObject retain];
}
是否正确,或者我应该检查新 View 是否与当前 View 不一样
- (void)setMyLabel:(UILabel *)anObject
{
if(anObject != myView){
[myLabel release];
myLabel = [anObject retain];
}
}
只有 myView 和 anObject 是对象指针。那么我们应该用 -isEqual 方法检查它们吗?或者我们根本不需要检查它? @synthesize 默认生成什么代码?
谢谢。
最佳答案
只有第二个版本(带有 if
语句)是正确的。在您的第一个版本中,假设 anObject
和 myLabel
实际上指向同一个对象(即,指针相同)。在这种情况下,您将释放该对象,如果没有其他对象保留它,这将导致它被释放。随后尝试保留已释放的对象将导致崩溃。
关于objective-c - @synthesize 创建什么 UIView setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760288/