Objective c Xcode分析以及我是否应该发布保留的IBOutlet?
Xcode Analyze抱怨我错误地减少了用户名的引用计数 声明如下:Objective c Xcode分析以及我是否应该发布保留的IBOutlet?,objective-c,Objective C,Xcode Analyze抱怨我错误地减少了用户名的引用计数 声明如下: @property (nonatomic, retain) UITextField *username; @property (nonatomic, retain) UITextField *password; @property (nonatomic, retain) UIButton *login; 以下是dealloc: - (void)dealloc { [self.username release];
@property (nonatomic, retain) UITextField *username;
@property (nonatomic, retain) UITextField *password;
@property (nonatomic, retain) UIButton *login;
以下是dealloc:
- (void)dealloc
{
[self.username release];
[self.password release];
[self.login release];
[super dealloc];
}
一般来说,你不会这样做
[self.username release];
但不是
self.username = nil;
或
我不确定这是否会导致它像那样抱怨,尤其是因为你这样做是为了你所有的财产。通常你不会这样做
[self.username release];
但不是
self.username = nil;
或
我不确定这是否会导致它这样抱怨,esp因为您正在为所有属性执行此操作。对于您的ViewController,您应该确保在viewDidUnload中将IBOutlet设置为nil,因为viewDidLoad和viewDidUnload方法在视图控制器的生命周期中可能会被多次调用 您可能应该使用以下方法:
-(void)viewDidUnload{
self.username=nil;
}
-(void)dealloc{
[username release];
[super dealloc];
}
对于ViewController,您应该确保在viewDidUnload中将IBOutlet设置为nil,因为viewDidLoad和viewDidUnload方法在视图控制器的生命周期中可能会被多次调用 您可能应该使用以下方法:
-(void)viewDidUnload{
self.username=nil;
}
-(void)dealloc{
[username release];
[super dealloc];
}
@logancautrell:可能是OP有一个带有ARC的项目。在这种情况下,将警告您错误地减少本地引用计数仅为1的对象上的引用计数(因为所属引用的
release
代码将在编译时自动插入,因此您将在代码中得到2个版本)。@logancautrell:可能是OP有一个带有ARC的项目。在这种情况下,将警告您错误地减少本地引用计数仅为1的对象上的引用计数(因为所属引用的release
代码将在编译时自动插入,因此最终代码中会有2个版本)。