看到这样的block的声明
- (void)XXXXXXX:(NSError * __autoreleasing *)error { ... *error = ...... ... }
于是将__autoreleasing去掉,编译和运行没有任何问题。于是就好奇了,这里到底有什么意义。查找了一下资料,大概的意思是:
首先需要让编译器知道这个参数是什么样的类型,比如strong还是weak这样编译器才知道如何操作引用计数器。如果删除__autoreleasing编译器则会进行推断。如果明确告知编译器如何做,肯定是有利无弊的。这里告诉编译器这个传入参数是引用变量,并且这个参数是__autoreleasing的。因为本来我们传入的参数确实是autoreleasing的所以这里没有任何问题。
时间: 2024-12-19 04:32:22