在简单类对象-c中使用ARC

时间:2012-06-25 20:37:51

标签: 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中使用它。我必须使用什么参考?我是否必须使用NSString等副本?

编辑:

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

@interface MyViewController : UIViewController

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

我必须使用什么参考NSString和MyItem对象?

2 个答案:

答案 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 指定访问者是非原子的。默认情况下,   访问者是原子的。