有人能详细解释给我时,我必须使用各个属性:nonatomic,copy,strong,weak,等,为申报财产,并解释每个做什么?某种例子也会很棒.我正在使用ARC.
据我所知,Block就像一个对象,因为你可以向它发送复制或释放消息,例如:
[myBlock copy];
Run Code Online (Sandbox Code Playgroud)
但是每当我这样做或释放一个块时,我都会得到EXC_BAD_ACCESS.
如果我使用块函数,一切都按预期工作,例如:
Block_copy(myBlock);
Run Code Online (Sandbox Code Playgroud)
我认为释放和复制块的两种方式都是相同的?
这不是一个问题,但如果我有一个Block的属性(副本)有点烦人,我必须自己编写setter方法.
例如:使用属性:
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock;
Run Code Online (Sandbox Code Playgroud)
设置时会导致EXC_BAD_ACCESS cancelledBlock
但如果我这样做:
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock; //saves me doing the getter as well
- (void)setCancelledBlock:(void (^)(void))aCancelledBlock {
if (cancelledBlock == aCancelledBlock) {
return;
}
void (^oldValue)(void) = cancelledBlock;
cancelledBlock = Block_copy(aCancelledBlock);
Block_release(oldValue);
}
Run Code Online (Sandbox Code Playgroud)
没有EXC_BAD_ACCESS,一切都按预期运行.