0

我想在我的简单类中使用 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 对象,我必须使用什么参考?

4

2 回答 2

4

您想使用strong而不是retain. 是的,你仍然应该使用copyfor NSStrings。的使用copy与ARC无关;您想要copy,因为如果有人将 an 分配NSMutableString给您的财产,您不希望字符串在您背后改变。Usingcopy为您提供了分配发生时可变字符串的不可变快照。


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

@interface MyViewController : UIViewController

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

NSString也可以声明strong,但对于copy字符串(以及实际上任何具有可变变体的不可变类型,例如数组、字典等)几乎总是更可取。

于 2012-06-25T20:40:31.743 回答
3

(非原子,强)是我使用的,但这里是文档

或快速参考

二传手语义

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

strong指定与目标对象存在强(拥有)关系。

指定与目标对象存在弱(非拥有)关系。

如果目标对象被释放,属性值会自动设置为 nil。

(OS X v10.6 和 iOS 4 不支持弱属性;请改用 assign。)

copy指定应使用对象的副本进行分配。

先前的值被发送一个释放消息。

复制是通过调用复制方法来制作的。此属性仅对必须实现 NSCopying 协议的对象类型有效。

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

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

保留指定在分配时应在对象上调用保留。

原子性

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

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

于 2012-06-25T20:41:36.423 回答