首页 > 解决方案 > 在 Objective C 中创建 NSAlert 时,我需要释放 NSAlert 吗?

问题描述

所以我做了一个函数:

void alertErr(const char *const message, const char *const info) {
    NSAlert *alert = [[NSAlert alloc] init];
    alert.alertStyle = NSAlertStyleCritical;
    alert.messageText = @(message);
    alert.informativeText = @(info);
    [Alert runModal];
}

通常有某种形式@AutoReleasePool或我不知道的东西,但我的函数是否包含内存泄漏?还有什么理由这样做而不是在 Swift 中这样做?

标签: objective-c

解决方案


如果您启用了 ARC(多年来一直是新项目的默认设置),那么您不需要发布NSAlert. release实际上,如果您尝试编译,代码将无法编译,因为启用 ARC 时不允许您发送消息。

如果您禁用了 ARC,那么是的,您应该[alert release][alert runModal]. 您需要这样做,release因为您在发送alloc消息时已成为它的所有者。

在Cocoa 核心能力指南中的“内存管理规则”中阅读更多内容。

如果您的项目已经包含 Swift 代码,那么没有特别的理由使用 Objective-C 而不是 Swift 来创建此警报。

如果您的项目还没有包含 Swift 代码,那么将您的第一个 Swift 代码添加到项目中可能会比您想要的更多地增加编译时间。Objective-C 的编译速度通常比 Swift 快得多。


推荐阅读