【问题标题】:Memory Management in Objective-C, property return an objc-c object with a +1 retain count, UIGraphicsBeginImageContextWithOptionsObjective-C中的内存管理,属性返回一个带有+1保留计数的objc-c对象,UIGraphicsBeginImageContextWithOptions
【发布时间】:2011-12-15 02:33:18
【问题描述】:

我运行了分析器,但我不确定一些内存管理是如何工作的。我有一个属性(它没有自定义 setter 或 getter):

@property (nonatomic, retain) NSMutableArray *myArray;

那我以后试试用:

if ([[MyClass sharedDelegate].myArray containsObject:"test"])

它说“属性返回一个具有 +1 保留计数的 Objective-C 对象”

其中sharedDelegate定义为:

+(MyApp*)sharedDelegate
{
    return (MyApp*)[[UIApplication sharedApplication] delegate];
}

我不明白这一点,因为我看不到保留在哪里?我认为以这种方式使用属性是使用 getter 方法,它只返回 myArray 的值。那么内存泄漏在哪里呢?

然后它指向

UIGraphicsBeginImagecontextWithOptions(container.bounds.size, YES, 1.0);

对象泄露:分配的对象在此执行路径的后面没有被引用,并且保留计数为 +1

我也不明白这一点,或者这与第一次内存泄漏有何关系。它们似乎无关。

【问题讨论】:

    标签: objective-c ios cocoa-touch memory-management


    【解决方案1】:

    您已将该属性标记为返回保留引用。

    【讨论】:

    • retain 表示在集合上保留,而不是在获取时保留。
    【解决方案2】:

    myArray 的 getter 是什么? @synthesize,还是自定义?

    我认为错误也可能出现在 sharedDelegate 中。返回单例时不要保留。

    第二个似乎无关。也许你没有打电话给UIGraphicsEndImageContext。如果你在其他函数中调用它,那可能没问题。编译器期望在同一个函数中调用这两个函数的正常模式,但这不是必需的。

    【讨论】:

    • 我添加了 sharedDelegate 方法来帮助缩小问题范围,因为我仍然没有看到错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多