Objective c Xcode分析以及我是否应该发布保留的IBOutlet?

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];

Xcode Analyze抱怨我错误地减少了用户名的引用计数

声明如下:

@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个版本)。