objective-c - @synthesize 创建什么 UIView setter

标签 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]; 
}

是否正确,或者我应该检查新 View 是否与当前 View 不一样

- (void)setMyLabel:(UILabel *)anObject
{
    if(anObject != myView){
        [myLabel release];
        myLabel = [anObject retain]; 
    }
}

只有 myView 和 anObject 是对象指针。那么我们应该用 -isEqual 方法检查它们吗?或者我们根本不需要检查它? @synthesize 默认生成什么代码?

谢谢。

最佳答案

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

关于objective-c - @synthesize 创建什么 UIView setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760288/

相关文章:

ios - Sprite 套件中的 UIImageView

iphone - UITableview 的每个单元格中的不同图像

objective-c - 如何从文件系统删除图像/文件?

iphone - iOS - 动态标签大小未正确返回

iOS:无法在 UITableViewController 上创建自定义 View

objective-c - NSWindow 子窗口在父窗口单击时关闭

ios - TableViewController 委托(delegate)没有被调用

ios - 将 Swipe Gesture 添加到项目中的所有 View Controller

ios - UIView 背景上的图像纹理。多大算太大?

objective-c - 使用 Core Graphics 绘图在 Retina 显示屏上看起来很笨重