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_2https://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(); |
Комментариев нет:
Отправить комментарий