bea*_*ain 8 properties objective-c objective-c-blocks automatic-ref-counting
假设
typedef void (^MyResponseHandler) (NSError *error);
@property (strong, nonatomic) MyResponseHandler ivarResponseHandler;
synthesize ivarResponseHandler = _ivarResponseHandler;
- (void)myMethod:(MyResponseHandler)responseHandler
{
self.ivarResponseHandler = responseHandler;
...
}
Run Code Online (Sandbox Code Playgroud)
通过@property正确的方式分配给ivar 吗?我知道在手动内存管理中你需要self.ivarResponseHandler = [responseHandler copy];确保将块从堆栈复制到堆中.但是,观看会议322 - 来自WWDC 2011的会议-C深度进展(第25分钟),发言人说ARC自动处理将块分配给ivar.我只是想确定一下.
rob*_*off 11
ARC 将在您发布的代码中自动为您执行复制.
如果将块转换为a id,ARC将不会为您执行复制.例如,在此代码中,ARC将不执行复制,因为addObject:参数类型为id:
NSMutableArray *array = [NSMutableArray array];
[array addObject:responseHandler];
Run Code Online (Sandbox Code Playgroud)
熊山,
事实上,确保块被复制的最简单方法是将其设置@property为使用副本。如:
@property (copy, nonatomic) MyResponseHandler ivarResponseHandler;
Run Code Online (Sandbox Code Playgroud)
它可以满足您所需的一切。
安德鲁
| 归档时间: |
|
| 查看次数: |
2659 次 |
| 最近记录: |