Usyiew setter在@synthesize创建的内容

时间:2011-04-22 21:34:29

标签: objective-c ios uiview setter synthesizer

如何制作自定义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默认生成什么代码?

感谢。

1 个答案:

答案 0 :(得分:2)

只有第二个版本(带有if语句)才正确。在您的第一个版本中,假设anObjectmyLabel实际上指向同一个对象(即指针是相同的)。在这种情况下,您将释放该对象,如果没有其他对象保留它,则会导致该对象被释放。随后保留解除分配对象的尝试将导致崩溃。

相关问题