1

如何制作自定义 UIView 设置器。例如:

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 默认生成什么代码?

谢谢。

4

1 回答 1

2

只有第二个版本(带有if声明)是正确的。anObject在您的第一个版本中,想象它myLabel实际上指向同一个对象(即,指针是相同的)。在这种情况下,您将释放该对象,如果没有其他对象保留它,这将导致它被释放。随后尝试保留已释放对象将导致崩溃。

于 2011-04-22T21:44:13.823 回答