考虑:
typedef void (^select_block_t)(UIView *) ;
(1) @property (copy, nonatomic) select_block_t myBlockProperty ;
(2) @property (strong, nonatomic) select_block_t myBlockProperty ;
(3) @property (assign, nonatomic) select_block_t myBlockProperty ;
和
(A) self.myBlockProperty = ^(UIView *) {NSLog(@"Hi");} ;
(B) self.myBlockProperty = [^(UIView *) {NSLog(@"Hi");} copy] ;
我试图了解映射哪个属性声明与块复制语义
的正确方法是什么我在[{3}}上看到了有利于[1:B]的示例here
但后来我对“复制”操作的多余程度感到困惑。 我有限的理解是[1:A]应该是正确的,因为我想要 我在分配属性时要复制一次的块,而不是在创建块时再复制一次,然后在属性赋值时再次复制。
根据我的理由,[3:B]也是有道理的。那么,我误解了什么?
答案 0 :(得分:9)
[1:A]是正确的,是的。 [3:B]不正确,因为:
copy
时),并且此属性设置器将不会保留它。因此该属性将包含一个错误的指针,它是一个等待发生的EXC_BAD_ACCESS。