вторник, 19 февраля 2019 г.

Копирование блоков 2


https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Blocks/Articles/bxUsing.html
Typically, you shouldn’t need to copy (or retain) a block. You only need to make a copy when you expect the block to be used after destruction of the scope within which it was declared. Copying moves a block to the heap.


You can copy and release blocks using C functions:
Block_copy();
Block_release();
To avoid a memory leak, you must always balance a Block_copy() with Block_release().

попробовал так: 
    int j=0;
    __block int i=0;
    typeblock block = ^(void) {
        i+=10+j;
    };
    typeblock block_copy = [block copy];
    typeblock block_copy_2 = (typeblock)CFBridgingRelease(Block_copy(CFBridgingRetain(block)));
    block();
    block_copy();
    block_copy_2();

Возможно что-то неправильно, но главное в том, что получил снова то же значение, то есть
block== block_copy == block_copy_2

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html


The syntax to define a property to keep track of a block is similar to a block variable:
@interface XYZObject : NSObject
@property (copy) void (^blockProperty)(void);
@end


A block property is set or invoked like any other block variable:

    self.blockProperty = ^{
        ...
    };
    self.blockProperty();

Комментариев нет:

Отправить комментарий