use*_*597 3 gcc objective-c llvm llvm-gcc ios
我必须修复一些现有的代码,用LLVM(在iOS上)构建得很好,这样它也可以用llvm-gcc-4.2构建.我已经完成了所有的事情,除了在几个地方找到的这种模式:
@property (nonatomic, retain) __block id myProperty;
Run Code Online (Sandbox Code Playgroud)
我怀疑这里的意图是允许从块内部访问属性而不保留self.如何删除__blockgcc在这里不支持的属性,但仍能达到同样的效果?
CRD*_*CRD 12
我建议你找到一个编译器bug,声明:
@property (nonatomic, retain) __block id myProperty;
Run Code Online (Sandbox Code Playgroud)
毫无意义.的__block限定符用于局部(堆栈分配的)变量,使它们被通过参考块通过,因此它们可以被更新,并且通常[*]保存在堆上而非栈.
因此,限定符__block对于与对象实例有关的属性声明没有意义,对象实例是在Obj-C中始终分配的堆.
只需__block从属性声明中删除- 为每个编译器.
[*]如果永远不会将块复制到堆中,则编译器可以优化__block变量,而不是将它们移动到堆中.
在块中使用该变量之前,创建一个类型为 的本地指针__block。切勿__block在@property声明中使用。
例如:TypeOfVariable __block *bock_pointer = self.property;
^{ inside the block use bock_pointer }
| 归档时间: |
|
| 查看次数: |
3077 次 |
| 最近记录: |