Rozważmy:skopiować właściwość i Block_copy (myBlock)/[myBlock kopia]
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 ;
oraz:
(A) self.myBlockProperty = ^(UIView *) {NSLog(@"Hi");} ;
(B) self.myBlockProperty = [^(UIView *) {NSLog(@"Hi");} copy] ;
Próbuję zrozumieć, co jest poprawny sposób mapę, która deklarację mienia, z którym blok kopii semantyka
I przykładowe here na S.O. które sprzyjają [1: B]
Ale potem jestem zdezorientowany tym, jak niepotrzebna jest operacja "kopiowania". Moje ograniczone zrozumienie polega na tym, że [1: A] powinno być poprawne, ponieważ chcę, aby jeden blok był kopiowany raz, gdy przypiszę właściwość, a nie raz przy tworzeniu bloku, a następnie raz jeszcze w czasie przypisywania własności.
[3: B] również miałoby sens zgodnie z moimi przesłankami. Więc, co ja nie rozumiem?
Czekaj, zobaczyłeś swój tag _automatic-ref-counting_, używasz ARC? – joerick
Tak, używam ARC. – verec
@verec Zaktualizowałem swoją odpowiedź. Daj mi znać, jeśli masz jakieś pytania, nie jestem pewien, jaki byłem jasny! – joerick