在 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 快得多。
所以我做了一个函数:
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 快得多。