对象:自定义对象处理

时间:2011-01-11 20:51:00

标签: iphone objective-c ios

我正在创建自己的自定义对象,我想知道我是否需要保留我的属性或使用其他内容,例如copy(这会做什么?)?

@interface Asset : NSObject {
    NSString *name;
    NSNumber *assetId;
    NSNumber *linkId;
    NSNumber *parentId;
}

@property (nonatomic, retain) NSString *name; // should I use retain here or something else?
@property (nonatomic, retain) NSNumber *assetId;
@property (nonatomic, retain) NSNumber *linkId;
@property (nonatomic, retain) NSNumber *parentId;

@end

另外,在我的.m中,我是否还需要合成以及发布?

3 个答案:

答案 0 :(得分:4)

Objective-C编程语言中关于Declared Properties的章节解释了copy做什么以及合成访问器的内容。

答案 1 :(得分:1)

我个人的偏好:

@interface Asset : NSObject {
    // no need to declare them here the @synthesize in the .m will sort all that out
}


// use copy for NSString as it is free for NSString instances and protects against NSMutableString instances being passed in...thanks to @bbum for this
@property (nonatomic, copy) NSString *name;

// no need for copy as NSNumber is immutable
@property (nonatomic,retain) NSNumber *assetId;
@property (nonatomic,retain) NSNumber linkId;
@property (nonatomic,retain) NSNumber parentId;

@end

答案 2 :(得分:1)

对于典型情况,你的.m会有这样的行:

@synthesize name;
...

告诉编译器自动发出getter / setter方法。您也可以自己编写/覆盖它们。 因此,当有人执行fooAsset.name = x时,您的对象将保留自己对'x'的引用。 您需要的另一件事是dealloc方法来释放对您的成员的引用:

- (void)dealloc {
    [name release];
    ....
    [super dealloc];
}

请注意,如果从未指定'name',它仍然适用; nil会默默地吃掉“释放”的消息。