相关疑难解决方法(0)

Objective-C声明@property属性(非原子,复制,强,弱)

有人能详细解释给我时,我必须使用各个属性:nonatomic,copy,strong,weak,等,为申报财产,并解释每个做什么?某种例子也会很棒.我正在使用ARC.

objective-c automatic-ref-counting declared-property

288
推荐指数
4
解决办法
16万
查看次数

复制或保留Block时EXC_BAD_ACCESS

据我所知,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,一切都按预期运行.

iphone exc-bad-access objective-c objective-c-blocks

16
推荐指数
1
解决办法
3513
查看次数