cfi*_*her 4 cocoa memory-management objective-c
我有一个非常简单的Person类,它有一个叫做名字的ivar(一个NSString).当我尝试在dealloc中释放这个ivar时,静态分析器给我一个奇怪的错误:
调用者此时不拥有的对象的引用计数的不正确的减少
我究竟做错了什么?
顺便说一句,这是我的代码:
@interface Person : NSObject {
}
@property (copy) NSString *name;
@property float expectedRaise;
@end
@implementation Person
@synthesize name, expectedRaise;
-(id) init {
if ([super init]) {
[self setName:@"Joe Doe"];
[self setExpectedRaise:5.0];
return self;
}else {
return nil;
}
}
-(void) dealloc{
[[self name] release]; // here is where I get the error
[super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)
Dar*_*ren 18
您正在释放从属性getter方法返回的对象,在许多情况下,这将指示可能的错误.这就是静态分析正在捡起它的原因.
相反,使用:
self.name = nil;
Run Code Online (Sandbox Code Playgroud)
要么:
[name release];
name = nil;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5254 次 |
| 最近记录: |