代码1
#import <Foundation/Foundation.h>
@interface ClassA: NSObject @end
@implementation ClassA -(id)init{if(self=[super init]){NSLog(@"%s %@", __FUNCTION__, self);}return self;}-(void)dealloc{NSLog(@"%s %@", __FUNCTION__, self);}@end
void print_obj(ClassA **obj)
{
NSLog(@"%s %@", __FUNCTION__, *obj);
}
int main(const int argc, const char *argv[])
{
@autoreleasepool
// 正确的代码
ClassA *a;
print_obj(&a);
// Pointer to non-const type 'ClassA *' with no explicit ownership
// 声明没有明确的所属,我理解是指没有明确的所有权修饰符,就是说预处理器不会自动加入所有权修饰符
ClassA **b;
print_obj(b);
// 我们加一个所有权修饰符,Passing address of non-local object to __autoreleasing parameter for write-back
// 说明print_obj函数的参数ClassA **obj被预处理为ClassA * __autoreleasing *obj,附加了_autoreleasing的所有权修饰符
// 和__strong不一致,所以编译报错
ClassA * __strong *c;