【问题标题】:How to releas the memory allocated in for appDelegate shared instace如何释放为 appDelegate 共享实例分配的内存
【发布时间】:2012-06-06 09:03:30
【问题描述】:

在我的应用程序中,我创建了一个 appdelegate 共享实例,并且我正在为某个数组分配内存,例如

appDelegate = (AppDelegate_Shared *)[[UIApplication sharedApplication] delegate];
appDelegate.allServiceAppList_array = [[NSMutableArray alloc]init];
appDelegate.blockXMLData_array = [[NSMutableArray alloc]init];
appDelegate.notesXMLData_array = [[NSMutableArray alloc]init]; 

现在我不知道如何释放我分配的所有数组。它显示了我分配和初始化内存的潜在泄漏。

释放这些对象的正确方法是什么。

提前致谢

【问题讨论】:

标签: iphone ios memory-management memory-leaks


【解决方案1】:

如果 AppDelegate 属性被定义为 (retain),就这样做

appDelegate.something = [[[Something alloc]init]autorelease];

这是 ObjC 中最常见的模式。

保留属性会保留新对象,自动释放本质上是在未来释放对象,所以最终结果是保留计数为1的对象,将在dealloc方法中释放。

【讨论】:

    【解决方案2】:

    不要那样做

    这样用

    NSMutableArray* arr = [[NSMutableArray alloc]init];
    appDelegate.allServiceAppList_array = arr;
    [arr release];
    arr =nil;
    
    arr = [[NSMutableArray alloc]init];
    appDelegate.blockXMLData_array = arr;
    [arr release];
    arr =nil;
    
    arr = [[NSMutableArray alloc]init];
    appDelegate.notesXMLData_array = arr;
    [arr release];
    arr =nil;
    

    【讨论】:

    • 谢谢,但是我可以按照上述方式释放数组吗?我喜欢你的方式。
    • 已分配数组的指针已分配给委托数组,您正在释放您范围内的指针
    • 太好了,谢谢你的帮助。
    • @user1398312 请确保您阅读并理解 Objective-C 的内存管理(请参阅我在评论中添加的链接)。不要只是盲目地复制和粘贴代码,因为这会导致问题 - 花时间去理解它。请注意,如果您使用 ARC,此答案会导致很多问题。
    • @NickBull 我想你还没有读过他的问题。他已经问过如何释放那些对象,所以如果你有一些常识,肯定有 MRC
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2017-08-28
    相关资源
    最近更新 更多