Tôi hiểu rằng bạn phải sao chép các khối để chúng có thể di chuyển xung quanh sau khi thoát khỏi khung ngăn xếp. Nhưng, làm thế nào để áp dụng cho ngăn xếp phân bổ khối sử dụng trong vòng một khối lồng nhau như trong ví dụ mã sau:Tôi có phải sao chép một khối ở đây không?
- doSomethingFunkyThenCall:(void(^)(int someValue))callback
{
[[NSOperationQueue currentQueue] addOperationWithBlock:^{
// ... do some work here, potentially nesting into further blocks ...
callback(result);
}];
}
Rõ ràng, khung doSomethingFunkyThenCall:
chồng sẽ chấm dứt trước khi gọi lại được thực thi, vì vậy nó sẽ phải đã sao chép. Nhưng điều này có xảy ra tự động trong cuộc gọi tới addOperationWithBlock:
hoặc tôi có phải thực hiện thủ công không?
Không; không cần phải sao chép khối trong trường hợp này. Khi khối enqueued với 'addOperationWithBlock:' được sao chép (mà 'NSOperationQueue' sẽ làm), nó sẽ sao chép khối đóng gói. – bbum
Cảm ơn. Bạn đúng. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW1 – joerick
Cảm ơn bbum và joerick! Tôi đã không nhìn thấy đoạn này từ liên kết đó trước đây: "Khi bạn sao chép một khối, mọi tham chiếu đến các khối khác trong khối đó sẽ được sao chép nếu cần thiết - toàn bộ cây có thể được sao chép (từ trên cùng). và bạn tham chiếu một khối từ bên trong khối, khối đó sẽ được sao chép. " –