Người ta nói trong tài liệu của apple: Một khối chữ (có nghĩa là,^{...}) là địa chỉ của một cấu trúc dữ liệu cục bộ ngăn xếp đại diện cho khối. Do đó, phạm vi cấu trúc dữ liệu ngăn xếp cục bộ, do đó bạn nên tránh các mẫu được hiển thị trong các ví dụ sau:Tôi không biết những gì khối của tôi nên tránh cho phạm vi chữ trong mục tiêu-c
void dontDoThis() {
void (^blockArray[3])(void); // an array of 3 block references
for (int i = 0; i < 3; ++i) {
blockArray[i] = ^{ printf("hello, %d\n", i); };
// WRONG: The block literal scope is the "for" loop.
}
//for example I invoke the block here
blockArray[1]();
}
void dontDoThisEither() {
void (^block)(void);
int i = random():
if (i > 1000) {
block = ^{ printf("got i at: %d\n", i); };
// WRONG: The block literal scope is the "then" clause.
}
// ...
}
Tôi không biết các mẫu nên tránh. Có vẻ như tôi có thể gọi khối có cùng phạm vi chữ như định nghĩa khối, ví dụ như sau câu lệnh "if" hoặc "for". Bạn có thể giúp tôi giải thích nó không?
Ở đây nó là liên kết https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Blocks/Articles/bxUsing.html#//apple_ref/doc/uid/TP40007502-CH5-SW1
Cảm ơn bạn. Và bạn có nghĩa là khối phải được khai báo như một thuộc tính được sao chép, thay vì một biến ngăn xếp trong phương thức? –
hoặc tôi có thể khai báo một khối dưới dạng biến toàn cầu? Trên thực tế, nó nên được lưu trữ trong ngăn xếp cục bộ là tốt, nhìn thấy ở khắp mọi nơi. –
OK! Cảm ơn nhiều. Câu lệnh ghép khối thích một giá trị số nguyên đáng kể, như là địa chỉ của một cấu trúc dữ liệu ngăn xếp cục bộ. –