AFAIK, __block
được sử dụng khi bạn thay đổi, bên trong khối, địa chỉ mà một biến (được khai báo bên ngoài khối) trỏ đến.ARC có cho tôi biết khi nào tôi phải sử dụng __block không?
Nhưng, điều gì xảy ra nếu tôi thay đổi giá trị mà biến trỏ đến nhưng con trỏ vẫn giữ nguyên? Ví dụ: nếu tôi có NSMutableArray *array
và tôi chỉ đang làm [array addObject:object]
bên trong khối? Trong trường hợp này, tôi không thay đổi con trỏ array
, nhưng tôi đang thay đổi giá trị mà nó trỏ đến. Vì vậy, tôi vẫn phải sử dụng __block
khi khai báo NSMutableArray *array
?
gì về trình biên dịch tối ưu hóa ? '__block' có thể gợi ý rằng một đối tượng không bao giờ thay đổi, và nếu' NSArray' được inlined, các lời gọi tiếp theo tới dung lượng có thể sai. – Dani
'__block' cho biết biến có thể thay đổi. Có hay không biến là '__block' hoặc const-copy (như mặc định), gọi phương thức trên đối tượng sẽ không bị ảnh hưởng. – bbum
Nhưng điều gì xảy ra nếu biến (NSArray *) là một thuộc tính tự? __block có cần phải được thêm vào không? – Amnysia