Ios 在简单类object-c中使用ARC

Ios 在简单类object-c中使用ARC,ios,nsstring,automatic-ref-counting,retain,Ios,Nsstring,Automatic Ref Counting,Retain,我想在我的简单类中使用ARC,在这里我存储一些值以传递到另一个类中。我想知道我必须在这个属性中使用什么样的引用。要在ARC中使用它,我有以下几点: @interface MyItem : NSObject @property (retain) NSString *valueID; @property (retain) NSString *itName; @property (retain) NSDate *creationDate; @property (assign) float rating

我想在我的简单类中使用ARC,在这里我存储一些值以传递到另一个类中。我想知道我必须在这个属性中使用什么样的引用。要在ARC中使用它,我有以下几点:

@interface MyItem : NSObject
@property (retain) NSString *valueID;
@property (retain) NSString *itName;
@property (retain) NSDate *creationDate;
@property (assign) float rating;
这是一个非常简单的类,我想知道如何在ARC中使用它。我必须使用什么参考资料?我必须为NSString等使用副本吗

编辑:

如果我有一个UIViewController,并且我想对NSString和MyItem对象使用如下属性:

@interface MyViewController : UIViewController

@property (nonatomic, retain) NSString *myString;
@property (nonatomic, retain) MyItem *newItem;
NSString和MyItem对象必须使用什么引用?

您希望使用strong而不是retain。是的,您仍然应该对NSString使用copy。拷贝的使用与ARC无关;您需要复制,因为如果有人将NSMutableString分配给您的属性,您不希望该字符串在背后更改。使用copy可以在赋值发生的位置为可变字符串提供一个不可变的快照

这是在视图控制器示例中声明属性的推荐方法:

@interface MyViewController : UIViewController

@property (nonatomic, copy) NSString *myString;
@property (nonatomic, strong) MyItem *newItem;

NSString也可以声明为strong,但是对于字符串和任何具有可变变量的不可变类型(例如数组、字典等),copy几乎总是更可取的。我使用的是非原子的strong,但这里是

或供快速参考

塞特语义学

这些属性指定集合访问器的语义。他们是 相互排斥

strong指定与对象之间存在强拥有关系 目标对象

弱指定与的非所有权关系弱 目标对象

如果目标对象已解除分配,则属性值为 自动设置为零

OS X v10.6和iOS 4不支持弱属性;使用分配 相反

copy指定应将对象的副本用于 任务

前一个值通过释放消息发送

通过调用copy方法进行复制。此属性有效 仅适用于对象类型,对象类型必须实现NSCopying协议

assign指定setter使用简单赋值。这 属性是默认值

您可以将此属性用于标量类型,如NSInteger和CGRect

retain指定在调用时应在对象上调用retain 任务

原子性

您可以使用此属性指定不使用访问器方法 原子的没有表示原子的关键字

非原子指定访问器是非原子的。默认情况下, 访问器是原子的


.. 这就是为什么人们在NSString属性上使用copy。我一直在想。谢谢谢谢你的回答,但我必须在NSString?中使用always copy for property?…例如在UIViewController中也是如此?@Piero:你不必使用copy,但强烈建议使用它。我将为您的特定视图控制器示例更新我的答案。感谢您的答案,文档非常有用,我还没有找到第一个答案…谢谢!