【问题标题】:How to return objects from function in ARC?如何从 ARC 中的函数返回对象?
【发布时间】:2013-06-26 07:39:34
【问题描述】:

如果没有 ARC,我可以对数组使用自动释放,如下所示

//-(NSMutableArray *)getObjects 

-(NSMutableArray *)retrieveObjects
{
    NSMutableArray *aArray = [[NSMutableArray alloc] init];
   // add objects
   return [aArray autorelease];
}

如何在 ARC 中实现相同的功能?

【问题讨论】:

标签: ios objective-c cocoa-touch cocoa automatic-ref-counting


【解决方案1】:

你没有autorelease对象。

【讨论】:

    【解决方案2】:

    什么都不做。 ARC 会自动释放数组,因为你的方法被命名为 getObjects 而不是像 allocObjectscopyObjectsnewObjects 这样的名称。

    阅读 clang 文档中的 “Retained return values”“Unretained return values” 了解详细信息。

    【讨论】:

      【解决方案3】:

      根据苹果的Advance Memory Management Programming Guide

      在自动引用计数或 ARC 中,系统使用与 MRR 相同的引用计数系统,但它会在编译时为您插入适当的内存管理方法调用。强烈建议您将 ARC 用于新项目。如果您使用 ARC,通常不需要了解本文档中描述的底层实现,尽管它在某些情况下可能会有所帮助。

      通常您不需要使用保留、释放或自动释放方法。系统会为你做的。但是,您需要注意不要执行保留循环;如果这样做,这些对象将永远不会被释放。

      【讨论】:

        【解决方案4】:

        您不必自动释放该对象。 ARC会处理它。但是,如果没有强烈引用 getObjects 方法返回的对象,它将立即被释放。

        array = [self getObjects] // array should be a strong variable
        

        【讨论】:

          【解决方案5】:

          像这样:

          -(NSMutableArray *)getObjects
          {
              NSMutableArray *aArray = [NSMutableArray alloc] init];
             // add objects
             return aArray;
          }
          

          【讨论】:

            猜你喜欢
            • 2015-12-15
            • 2021-07-20
            • 2012-02-29
            • 2016-03-17
            • 2019-10-13
            • 1970-01-01
            • 2021-01-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多