gpt4 book ai didi

objective-c - Objective-C 静态库中的内存管理

转载 作者:行者123 更新时间:2023-12-04 05:16:13 25 4
gpt4 key购买 nike

我对 Objectivce-C 很陌生我想知道 memory management 的正确方法是什么在 static library 没有弧。
假设我的库有一个返回 NSString* 的方法:

- (NSString *) foo
{
...
NSString *result = [[NSString alloc] initWithString:@"bar"];
return [result autorelease];
}

据我了解,自从 foo分配了 NSString它还需要释放它(或排队等待释放)。 NSString是一个返回值,所以我唯一能做的就是 autorelease它。这会产生一个问题:如果在命令行工具中使用库,开发人员需要知道 foo需要 @autoreleasepool否则调用 foo在 main @autoreleasepool 内多次吃掉内存。在我看来,这就像我将内存管理从库委托(delegate)给应用程序,这似乎是一件可怕的事情。有一个更好的方法吗?或者我能否以某种方式让开发人员明白 foo需要 @autoreleasepool ?

最佳答案

自动释放池不会自动释放对象;它们需要手动排水。在 Cocoa 应用程序中,这是由主线程的运行循环完成的,因此通常大多数开发人员不必为此做任何事情,也不知道这一点。

但是,在任何长时间运行的函数中,例如命令行工具的 main ,或后台线程,定期手动清空自动释放池是程序员的责任。

您正在遵循全局内存管理规则,这是正确的做法。没有必要改变任何东西;这与 ARC 或静态库无关。

关于objective-c - Objective-C 静态库中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14231896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com