2013-08-02 36 views
3

我对指定强,复制或赋值以及不指定它们感到困惑。我们不使用NIB文件。我的同事总是使用以下 - 他说iOS检测到并自动使用它强,弱等。声明属性的正确方法

@interface viewController : UIViewController 
    @property (nonatomic) UIImageView *imageView1; 
    @property (nonatomic) NSUInteger num; 
    @property (nonatomic) NSArray *array; 
@end 

我更喜欢遵循以下方式。

@interface viewController : UIViewController 
    @property (nonatomic, strong) UIImageView *imageView1; 
    @property (nonatomic, assign) NSUInteger num; 
    @property (nonatomic, copy) NSArray *array; 
@end 

哪一个更好的编程风格?第一个选项默认情况下始终具有强类型,但我总是明确指定它们。

+1

对于任何属性:atomic,readwrite和strong - 是默认值。因此,你的选择都是一样的。但是,如果编码器告诉编译器要分配什么属性,它总是更好。 – Mrunal

+0

我应该提到它,我知道strong是默认的,所以在技术上两者都是相同的,但我也指其他类型。编辑的问题。 – applefreak

+0

对于那些,正如我所说 - 如果开发人员/编码人员明确地告诉编译器并声明这些,那总是会更好。 – Mrunal

回答

3

如前面的答案所指出的,在目标C特性是通过默认,

  • atomic, strong/retain, readwrite - >对于指针类型
  • atomic, assign, readwrite - >对于原始类型

属性类型weak,copy需要由程序员明确指定,并且在没有办法自动决定

是什么意思每一个,直到指定

  • strong/retain引用的对象在内存维持生命。
  • weak当没有强引用时,被引用的对象将被销毁。通常用于引用delegate对象。
  • copy将创建分配给属性的对象的浅表副本。
  • assign/usafe_unretained(ARC)分配值。如果在指针类型的情况下使用,则这是指针的不安全的未保持分配。在ARC中,通常使用weak作为指针类型,因为它会使ivar=nil一旦被weak引用的对象被销毁。在这种情况下assign会导致悬挂指针。

就个人而言,我更喜欢,即使它strong默认指定属性类型。这增加了可读性,这在分析内存泄漏或调试崩溃的应用程序时特别方便。

您可以阅读更多关于properties here

希望有所帮助。

0

使用ARC,strong是默认值,所以两者在技术上是相同的。从Transitioning to ARC Release Notes

__strong is the default. An object remains “alive” as long as there is a strong pointer to it. 

注意,ARC将自动时需要的东西要弱检测,但是。

我倾向于明确,就像你的第二个例子,但我认为这主要是风格/习惯的问题。

0

默认为财产strong并为变量__strong了。在您当前的示例中,建议属性实际上是weak,但strong也是可以接受的。

对于非基元属性,您不应再使用assign,而应该使用unsafe_unretained。实际上它们是相同的,但后者让你知道你使用的是不安全的对象。

copy属性表示对象被复制(使用copy方法)并且不保留。推荐使用NSStringNSArray等可变形式的类。这是因为你不想保留你认为是不可变的字符串,但实际上在别处改变。

assign属性声明应该只用于原始类型和结构,例如, intCGSize

+0

你目前的例子已经改变了,所以我会澄清,我的意思是关于声明一个UIImageView。 –