CAShapeLayer双指针

时间:2015-12-02 17:13:53

标签: objective-c xcode

我正在尝试声明CAShapeLayer **dot_p;,但Xcode给了我以下错误:

Pointer to non-const type 'CAShapeLayer *' with no explicit ownership

发生了什么事?

1 个答案:

答案 0 :(得分:1)

如您所知,Objective-C使用自动引用计数系统(ARC)进行内存管理。为了使其工作,它需要理解任何指针的隐式所有权规则,以便它知道设置指针是否需要增加对象的保留计数。

ARC有合理的默认值,所以如果你说:

false

它假定您需要强大的参考。所以上面等同于写作:

CAShapeLayer *foo;

但是如果你有一个指针指针,它就无法猜出所有权规则应该是什么。如果你希望ARC在设置dot_p指针时增加CAShapeLayer的引用计数,你可以写:

__strong CAShapeLayer *foo;

如果您不希望它增加保留计数,您可以写:

CAShapeLayer *__strong *dot_p;

或者

CAShapeLayer *__weak *dot_p;

如果您不确定自己是否希望强大,那么我建议您在应用中严格考虑所有权规则,否则您很可能会引入保留周期(内存泄漏)或悬空指针(崩溃)。