在 Objective C 中创建 NSAlert 时,是否需要释放 NSAlert?

When creating an NSAlert in Objective C, will I need to release the 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中这样做吗?

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

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

Cocoa Core Competencies 指南的“内存管理规则”中阅读更多内容。

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

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