enumerateObjectsUsingBlock:
Gần đây, tôi đang sử dụng rất nhiều cho nhu cầu liệt kê nhanh của mình và tôi đang gặp khó khăn trong việc hiểu cách sử dụng BOOL *stop
trong khối liệt kê.
Các NSArray
trạng thái tham chiếu lớp
stop
: Tham chiếu đến giá trị Boolean. Khối có thể đặt giá trịYES
để ngừng xử lý thêm mảng. Đốistop
số là đối số duy nhất. Bạn chỉ nên đặt Boolean nàyYES
trong Block.
Vì vậy, tất nhiên tôi có thể thêm phần sau vào khối của mình để dừng việc liệt kê:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Từ những gì tôi có thể nói, không thiết lập rõ ràng *stop
để YES
không có bất kỳ tác dụng phụ tiêu cực nào. Việc liệt kê dường như tự động dừng lại ở cuối mảng. Vậy việc sử dụng có *stop
thực sự cần thiết trong một khối không?
stop
lá cờ là cố vấn; ví dụ, việc liệt kê có thể tiếp tục đối với một số lần lặp không xác định trong trường hợp đồng thời. Tức là bạn không nên đặt một__block
biến vô điều kiện trên mỗi lần đi qua phép liệt kê và mong đợi nó là giá trị "cuối cùng" khi sử dụngstop
để kết thúc sớm. Bạn nên luôn kết hợp "không, sử dụng đối tượng này" với cài đặtstop = YES;
.