2

它们之间的技术区别是什么,Apple推荐的方法是什么?

// 1

@interface CocoaQuizViewController : UIViewController
{
    IBOutlet UILabel *myLabel;
}
@end

// 2

@interface CocoaQuizViewController : UIViewController
{
    IBOutlet UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@end

// 3

@interface CocoaQuizViewController : UIViewController
{
    UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@end

// 4

@interface CocoaQuizViewController : UIViewController

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@end
4

4 回答 4

3

默认是(如果您直接从 xib 拖放出口到源类,则会自动生成):

@interface CocoaQuizViewController : UIViewController

@property (nonatomic, weak) IBOutlet UILabel *myLabel;
@end
于 2013-04-11T11:43:43.113 回答
2

一切都很好。

使用新的 LLVM,你应该做第四个。

@interface CocoaQuizViewController : UIViewController

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
//even you use strong and weak intead of retain,assign,copy
@end

在早期,您正在执行 1、2 和 3。现在大部分事情都是由编译器自动完成的。因此,您的工作现在比以往任何时候都容易。

使用 XCode4.4 及更高版本附带的 New Compiler,您可以自动合成您声明的所有属性。ivars 也会以您的属性名称为前缀创建。

于 2013-04-11T11:45:21.397 回答
1

第四个,因为现在苹果已经建议所有开发者使用属性。

于 2013-04-11T11:42:42.787 回答
1

几个想法:

  1. 您的第四个示例避免了可能困扰前三个示例的一整类可能的错误,您可能会意外地以两个 ivars 结束(例如,如果您省略@synthesize,编译器将生成一个名为 的 ivar _myLabel,您的myLabelivar 将不会被使用,因此,最终会变得多余,并且只会成为混淆的可能来源)。

  2. 如果您使用 ARC(如果可以的话,我会鼓励),那么显然该retain引用变为weak.

  3. IBOutlet无论如何,您可能不应该自己“编写”代码。这只是一个引入错误的机会。在 IB 中,在 IB 上工作时,点击“助手编辑器”显示您的代码,然后control从控件 - 拖动(或右键单击-拖动)到代码,IB 将为您编写代码!有关屏幕快照,请参阅https://stackoverflow.com/a/15551101/1271826

于 2013-04-11T11:53:40.720 回答