我刚刚偶然发现了以下SO主题:我们为什么要复制块而不是保留?其中包含以下句子:
但是,从iOS 6开始,它们被视为常规对象,因此您无需担心.
我真的很困惑这个断言,这就是为什么我要问:这个断言是否真的暗示Objective-C开发人员不需要
@property (copy) blockProperties 要么
[^(...){...) {} copy]
将块及其内容从堆栈复制到堆中了吗?
我希望我所做的描述很清楚.
请详细说明.
类似的问题
我用块做了好几次,就像我有强烈参考的指针一样
我听说你应该使用copy,但是使用块作为指针而不是原始对象的含义是什么?
我从来没有得到编译器的抱怨,我不应该使用
@property (nonatomic, strong) MyBlock block;
Run Code Online (Sandbox Code Playgroud)
但应该使用
@property (nonatomic, copy) MyBlock block;
Run Code Online (Sandbox Code Playgroud)
据我所知,块只是一个对象,所以为什么还要复制?
假设
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.我只是想确定一下.
properties objective-c objective-c-blocks automatic-ref-counting