Iphone Obj-c:自定义对象处理

Iphone Obj-c:自定义对象处理,iphone,objective-c,ios,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 s

我正在创建我自己的自定义对象,我想知道我是否需要保留我的属性或使用其他东西,例如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

此外,在my.m中,我还需要合成和释放吗?

关于Objective-C编程语言的章节解释了复制的作用和关于合成访问者的内容。

关于Objective-C编程语言的章节解释了复制的作用和关于合成访问者的内容。

我个人的偏好:

@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

我个人偏好:

@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

对于典型情况,您的.m将有如下行:

@synthesize name;
...
它告诉编译器自动发出getter/setter方法。您也可以自己编写/重写这些。 因此,当有人执行fooAsset.name=x时,您的对象将保留其对“x”的引用。 您还需要一个dealloc方法来释放对成员的引用:

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

请注意,如果从未分配“名称”,则仍然适用;nil将默默地接受“release”消息。

对于典型情况,您的.m将有如下行:

@synthesize name;
...
它告诉编译器自动发出getter/setter方法。您也可以自己编写/重写这些。 因此,当有人执行fooAsset.name=x时,您的对象将保留其对“x”的引用。 您还需要一个dealloc方法来释放对成员的引用:

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

请注意,如果从未分配“名称”,则仍然适用;nil将默默地接受“release”消息。

您应该使用copy;它是免费的NSString和防御在一个可变字符串传递的人。啊。。嗯,这是我今天学到的东西…它在NSN号码上也是免费的吗?可能;拷贝通常在不可变的对象上是免费的,包括NSArray之类的东西;它是免费的NSString和防御在一个可变字符串传递的人。啊。。嗯,这是我今天学到的东西…它在NSN号码上也是免费的吗?可能;拷贝通常在不可变的对象上是免费的,包括NSArray之类的对象。