0

我有一个在整个 UIViewController 中使用的 NSArray 对象。我可以将其声明为 ivar 或属性。这两种方法有什么优势(考虑到我使用的是 ARC)?

选项1:

@interface MyViewController {
    NSArray *_myArray;
}
@end

选项 2:

@interface MyViewController
    @property (strong, nonatomic) NSArray *myArray;
@end
4

1 回答 1

1

属性和 ivars 在概念上完全不同。

属性表示代码的逻辑组件。它可以但不必由 ivar 支持。它可以在运行时动态生成(如视图-frame)等。

ivar是实际分配的内存块,用于保存一些数据。

如果您(正确地)使用属性,您将获得开箱即用的 KVC/KVO 合规性等不错的功能。由于这个和其他原因,通常认为是一种很好的做法,尤其是在现代运行时,以属性的形式声明所有公共接口,并@synthesize在适当的情况下使用 ivars(经常使用)在内部支持它们。

就个人而言,我也更喜欢对私有数据使用属性,既可以方便以后公开(只需将声明移至标题!),也可以轻松提供属性的自定义实现(和 setter/ mutators) 而不是依赖简单的 ivar。

既然你提到了 ARC,我(还)没怎么用过它,但我认为只要你正确地声明你的财产,它应该不会有太大的不同。

于 2012-08-02T23:03:48.867 回答