我想在我的简单类中使用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对象?
答案 0 :(得分:4)
您想使用strong
代替retain
。是的,您仍应使用copy
作为NSString
。使用copy
与ARC无关;你想要copy
,因为如果有人为你的财产分配NSMutableString
,你不希望这个字符串在你背后发生变化。使用copy
可以在分配发生的位置为您提供可变字符串的不可变快照。
这是在视图控制器示例中声明属性的推荐方法:
@interface MyViewController : UIViewController
@property (nonatomic, copy) NSString *myString;
@property (nonatomic, strong) MyItem *newItem;
NSString
也可以声明为strong
,但copy
几乎总是更适合字符串(实际上任何具有可变变体的不可变类型,例如数组,字典,等)。
答案 1 :(得分:3)
(非原子,强)是我使用的,但这里是documentation
或快速参考
Setter Semantics
这些属性指定set访问器的语义。他们是 相互排斥。
strong 指定与该网站存在强大(拥有)关系 目标对象。
弱指定与...的弱(非拥有)关系 目标对象。
如果目标对象已取消分配,则属性值为 自动设置为nil。
(OS X v10.6和iOS 4不支持弱属性;请使用assign 来代替。)
copy 指定应使用对象的副本 分配
先前的值会发送一条释放消息。
通过调用复制方法进行复制。此属性有效 仅适用于必须实现NSCopying协议的对象类型。
assign 指定setter使用简单赋值。这个 属性是默认值。
您可以将此属性用于标量类型,例如NSInteger和CGRect。
retain 指定应在对象上调用retain 分配
<强>原子性强>
您可以使用此属性指定访问者方法不是 原子。 (没有关键字来表示原子。)
nonatomic 指定访问者是非原子的。默认情况下, 访问者是原子的。