xon*_*rlz 0 cocoa-touch memory-management properties objective-c
我定义了以下属性:
@property (nonatomic, retain) NSString *name_;
@property (nonatomic, retain) NSString *profilePicture_;
@property (nonatomic, retain) NSString *username_;
@property (nonatomic, retain) NSString *id_;
Run Code Online (Sandbox Code Playgroud)
我把它们设置在我init...
这样的:
-(id)initWithData:(NSDictionary *)data
{
self = [super init];
if (!self) {
return nil;
}
name_ = [data valueForKey:@"full_name"];
profilePicture_ = [data valueForKey:@"profile_picture"];
username_ = [data valueForKey:@"username"];
id_ = [data valueForKey:@"id"];
return self;
}
Run Code Online (Sandbox Code Playgroud)
以下内容dealloc
:
-(void)dealloc
{
[name_ release];
[username_ release];
[profilePicture_ release];
[id_ release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
但是dealloc
给了我一个错误:
正在释放的指针未分配
为什么是这样?我必须做的[[NSString alloc] init...]
还是[NSString stringWithString:]
?
valueForKey:
将返回一个自动释放的对象,因此您没有所有权.因为它们都是字符串,你可以copy
像这样调用
name_ = [[data valueForKey:@"full_name"] copy];
profilePicture_ = [[data valueForKey:@"profile_picture"] copy];
username_ = [[data valueForKey:@"username"] copy];
id_ = [[data valueForKey:@"id"] copy];
Run Code Online (Sandbox Code Playgroud)
您还应该更改@property
要使用的声明,copy
因为这通常建议用于字符串.
另一种选择是通过合成访问器,但我通常避免在任何一个init
或dealloc
归档时间: |
|
查看次数: |
345 次 |
最近记录: |