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 次 |
| 最近记录: |