我正在尝试声明CAShapeLayer **dot_p;
,但Xcode给了我以下错误:
Pointer to non-const type 'CAShapeLayer *' with no explicit ownership
发生了什么事?
答案 0 :(得分:1)
如您所知,Objective-C使用自动引用计数系统(ARC)进行内存管理。为了使其工作,它需要理解任何指针的隐式所有权规则,以便它知道设置指针是否需要增加对象的保留计数。
ARC有合理的默认值,所以如果你说:
false
它假定您需要强大的参考。所以上面等同于写作:
CAShapeLayer *foo;
但是如果你有一个指针指针,它就无法猜出所有权规则应该是什么。如果你希望ARC在设置dot_p指针时增加CAShapeLayer的引用计数,你可以写:
__strong CAShapeLayer *foo;
如果您不希望它增加保留计数,您可以写:
CAShapeLayer *__strong *dot_p;
或者
CAShapeLayer *__weak *dot_p;
如果您不确定自己是否希望强大,那么我建议您在应用中严格考虑所有权规则,否则您很可能会引入保留周期(内存泄漏)或悬空指针(崩溃)。