gpt4 book ai didi

iPhone dealloc 和 viewDidUnload 问题

转载 作者:行者123 更新时间:2023-12-01 17:44:39 26 4
gpt4 key购买 nike

我有一个关于 dealloc() 和 viewDidUnload() 方法的快速问题。我注意到很多代码示例,人们似乎在做不同的事情。

另外,我可能会补充一点,ARC 不是一个选项。

(1) 我是否应该在 dealloc() 方法中将所有属性设置为 nil,包括 IBOutlets。例如,我是否应该释放实例变量 [_myArrary release] 并设置 self.myArrary = nil。

(2) 在 vi​​ewDidUnload 中,我认为我必须将所有 IBOutlets 设置为 nil,以及在 viewDidLoad 中创建的任何内容。但是,myString 呢,可以说它是在调用 viewDidLoad 之后在另一个方法中初始化的。我应该将其设置为零吗?

如果我有一些这样声明的属性:

@property (nonatomic, retain) IBOutlet UITableViewCell *myTableCell;
@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@property (nonatomic, retain) NSArray *myArrary;
@property (nonatomic, retain) NSString *myString;

I synthesize them as such:

@synthesize myArrary = _myArrary;
@synthesize myTableCell;
@synthesize myLabel;
@synthesize myString;

- (void)viewDidLoad
{
[super viewDidLoad];

_myArrary = [NSArrary alloc] initWithObjects:@"testObject", nil];
}

- (void)viewDidUnload
{
self.myArrary = nil;

self.myTableCell = nil;

self.myLabel = nil;

[super viewDidUnload];
}

- (void)dealloc
{
[_myArray release];

[super dealloc];
}

最佳答案

  • 如果您在 dealloc 中将属性/变量设置为 nil 无关紧要,因为一旦对象被释放,您将无法访问它们。使用保留属性,做
    self.varname = nil;
    将释放变量并将其设置为零。很多人更喜欢只发布它们,我更喜欢将保留属性设置为 nil 以保持一致性。
  • 在 viewDidUnload 中,您应该释放并设置为 nil 任何不需要的内容,并且在 View 再次加载时将重新创建。这不是一个严格的规则,而是保持尽可能多的可用内存的好习惯。如果您的字符串将在 viewDidLoad 中重新创建,并且在再次加载 View 之前您不需要访问它,那么您可能应该释放它(为了安全起见,我会将其设置为 nil)。

    另一个注意事项,viewDidUnload 并不总是在 dealloc 之前被调用。所以你应该释放每个属性/变量是dealloc,即使它也被释放并在viewDidUnload中设置为nil。为了确保在释放类时不会泄漏,该代码的 dealloc 函数应如下所示:
    - (void)dealloc {
    [myTableCell release];
    [myLabel release];
    [_myArray release];
    [myString release];

    [super dealloc];
    }

    将它们设置为 nil 也是可以接受的,但前提是您使用综合 setter ,因为这也会释放变量。
    self.myLabel =  nil;

    很好,但是
    myLabel = nil;

    漏水。
  • 关于iPhone dealloc 和 viewDidUnload 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878047/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com