我应该为@property使用什么属性?

时间:2010-11-12 03:28:40

标签: objective-c

无论如何要确定何时或何种条件我应该使用不同的属性?我查看了苹果纪录片,这对我来说似乎很混乱。有人可以给我定义和一些例子吗?感谢。

2 个答案:

答案 0 :(得分:0)

  • 如果您的属性将从多个线程访问,请添加“atomic”,如果您不确定,请添加“nonatomic”(更快)
  • 如果您的财产永远不应该使用不同的值(即设置)进行变异,请添加“readonly”
  • 如果您想允许setter,并且值是Objective-C对象,请添加“retain”或“copy”(除非您确定要“分配”行为)。复制应特别用于NSString,保留大多数其他东西。您可能知道是否需要副本而不是保留相同的对象。
  • 如果你不想允许你的getter返回指向同一个对象的指针(因为它可能在你不知道的情况下发生变异),添加“copy”

关于我能想到的所有事情。你几乎不必考虑“我想要一个副本还是一个引用?”,“这会在多个线程中同时使用吗?”并且“这是可以设定的吗?”。

答案 1 :(得分:0)

内存管理属性

retain:设置值时,会向retain消息发送消息。这是您最常使用的属性。

copy:该值将发送copy消息,并存储返回的值。

对于使用retaincopy的属性,您必须release dealloc中的对象,否则对象将泄漏。

assignassign只是复制该值。对象的意思是复制对象地址(没有保留消息发送到对象)。在使用retain创建保留循环时,您应该使用它。保留循环的示例是父/子关系,其中两个对象都需要引用另一个(父级应该retain子级,子级应该assign父级。出于同样的原因,对象应该assign其代理。您也必须使用assign作为基元值(charintlong等)。 retaincopy不适用于基元,因为基元不是对象。