2

添加的UINavigationController按钮是否需要自动释放?这段代码好吗?添加的UINavigationController按钮是否需要自动发布?这段代码好吗?

背景 - 在开始触发“内存警告”后,我看到一系列导航问题出现在我的应用程序中。我想知道这是否与我在这里提出的问题有关。问题包括:

  1. 代码是正确的?
  2. 其他地方需要额外的内存管理代码吗? (例如,dealloc方法? - 我现在有没有代码在这里要解除任何按键)模拟内存警告
  • 任何其他提示重新什么可能与导航栏人口/使用一个UINavigationController屏幕流问题会错误下面

    代码:

    - (void)viewDidLoad { 
        [super viewDidLoad]; 
        self.navigationItem.rightBarButtonItem = [ 
        [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction:)] autorelease]; // IS AUTORELEASE HERE CORRECT? 
        self.navigationItem.leftBarButtonItem = self.editButtonItem; 
        self.title = @"Views"; 
    

    感谢

  • +1

    该代码没有任何问题,因为navigationItem将保留您在那里初始化的UIBarButtonItem,所以一旦它已经被自动释放,它就不会从内存中释放。 – Jason 2011-05-27 05:11:40

    回答

    3

    我始终只使用自动释放,我认为它应该做的很好。

    -1
    - (void)viewDidLoad { 
        [super viewDidLoad]; 
        UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction:)]; // IS AUTORELEASE HERE CORRECT? 
        self.navigationItem.rightBarButtonItem = rightBarButton; 
    [rightBarButton release]; 
        self.navigationItem.leftBarButtonItem = self.editButtonItem; 
        self.title = @"Views"; 
    } 
    
    +0

    此答案与原始代码没有实际差异。在同一行上自动释放对象在功能上与创建,设置和释放相同。也许如果你扩大你的答案来解释为什么你认为这是一个更好的方法,而不是仅仅倾销一些代码,我会重新考虑我的倒票。 – Jasarien 2011-05-27 11:27:55

    +0

    @Jasarien总是手动发布比autorelease更好http://stackoverflow.com/questions/2076402/what-is-the-difference-between-releasing-and-autoreleasing – xydev 2011-05-30 11:19:42

    +0

    我不同意。手动释放并不总是更好。在这个特定的例子中,它没有什么不同。自动释放极不可能导致任何可察觉的差异手动释放,因为没有紧密的循环或其他任何可能导致运行循环长时间不清空自动释放池的事件。自动释放是一个非常有用和强大的模式,不应该因为手动释放“更好”这一事实而感到气馁,就像你说的那样。 – Jasarien 2011-05-30 19:18:28