objective-c - [ self 自动释放] 可以接受吗?

标签 objective-c ios memory-management uikit

在某些情况下,您希望使用自己的动画(而不是使用 presentModalViewController:animated:UIAlertView)来呈现警报样式的 View Controller 。

释放这个 View Controller 的正确方法是在 View 消失时调用一个回调,但是设置一个委托(delegate)和所有这些似乎都是多余的。

所以我这样做:

- (void)dismiss
{
    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
        self.view.alpha  = 0;
    } completion:^(BOOL finished) {
        [self.view removeFromSuperview];
        [self autorelease];
    }];
}

并且呈现对象不会释放或自动释放 View Controller 。明智的内存管理我认为这没有问题。这是不好的做法吗?

最佳答案

我会考虑这种不好的做法。

仅调用了 retain 的对象在这个对象上应该调用 releaseautorelease在上面。

我假设你没有调用 [self retain]
我什至不确定这是否会像您期望的那样工作。你能保证self那时需要释放,为什么保留它的对象不能称为 release本身?。你是要强制selfdealloc ?

如果 self此时已解除分配,任何其他期待 self 的对象仍然活着会将消息传递给 nil,或者更糟糕的是,内存可能会被重新分配,并且这些对象将向任意对象发送消息。

关于objective-c - [ self 自动释放] 可以接受吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11577024/

相关文章:

ios - 如何让两个相同的 UISwipeGestureRecognizers 根据触摸位置同时工作?

ios - UITableView 重新加载数据有效,但单元格不会在屏幕上更新

ios - 多行容器 View 根据宽度布置子项

iphone - 以编程方式查找 iphone 的语言环境货币

ios - MKPinAnnotationView 禁用选择/突出显示,但不能抬起和拖动

ios - 删除 TableView 单元格按钮崩溃

ios - NSView/UIView有数据源是正常的吗?

iphone - 将指针设置为 nil,objective-c

c - 如何在不破坏严格别名的情况下在一个 malloc 调用中为数组和结构分配内存?

java - JNI 对象创建和内存管理