Đối với tôi, khả năng phản ứng, mô tả và gây rối của môi trường xung quanh là nơi nó ở. Điều này bắt đầu, ở cấp độ cơ bản, với khả năng vững chắc để tham chiếu đến _cmd
, tại bất kỳ thời điểm nào và nhận số SEL
hiện tại. Từ đó, nó là tùy thuộc vào bạn những gì NSInvocation
câu thần chú hay xảo ngôn runtime bạn chọn để tham gia vào.Nhìn vào bối cảnh khối hiện tại, à la _cmd bên trong một phương pháp
Bây giờ, bên trong một khối, bạn vẫn có thể gọi _cmd
và có được một mô tả mơ hồ của "bối cảnh" hiện nay, tức là
__30-[RoomController awakeFromNib]_block_invoke123RoomController
Mô tả? Có. Thông tin? Được rồi ... Nhưng không hữu ích lắm. Làm thế nào để tôi nhận được thông tin thời gian chạy động và chính xác bên trong một khối, cụ thể là chữ ký gọi, args, v.v ...?
I have found a useful little method to "describe" a block trước thời hạn cung cấp một ví dụ tốt về loại thông tin mà tôi hy vọng sẽ thu hút INSIDE khối.
typedef void(^blockHead)(NSString*);
blockHead v = ^(NSString*sandy) { NSLog(@"damnDog",nil); };
Log([v blockDescription]);
[v blockDescription] = <NSMethodSignature: 0x7fd6fabc44d0>
number of arguments = 2
frame size = 224
is special struct return? NO
return value: -------- -------- -------- --------
type encoding (v) 'v'
flags {}
modifiers {}
frame {offset = 0, offset adjust = 0, size = 0, size adjust = 0}
memory {offset = 0, size = 0}
argument 0: -------- -------- -------- --------
type encoding (@) '@?'
flags {isObject, isBlock}
modifiers {}
frame {offset = 0, offset adjust = 0, size = 8, size adjust = 0}
memory {offset = 0, size = 8}
argument 1: -------- -------- -------- --------
type encoding (@) '@"NSString"'
flags {isObject}
modifiers {}
frame {offset = 8, offset adjust = 0, size = 8, size adjust = 0}
memory {offset = 0, size = 8}
class 'NSString'
bạn thực sự không thể biết bất kỳ điều gì về chính khối đó trong khối trừ khi bạn có thể tham khảo nó bằng cách nào đó. BTW, tại sao bạn muốn biết những thông tin này? –
Khi các khối API sinh sôi nảy nở .. thường khó để nói cho người gọi của khối, v.v. Trình biên dịch cho phép các chữ ký không khớp ...số lượng đối số không chính xác và nhiều phương thức, cùng tên, nhưng các loại khối khác nhau, v.v. = cùng tồn tại mà không có khiếu nại ... Sẽ rất thú vị khi biết, đôi khi, điều thực sự xảy ra ... không chỉ là những gì "Tôi nghĩ" đang xảy ra. –
bạn có thể kiểm tra loại khối trước khi gọi nó, nhưng bạn không thể làm nhiều bên trong khối vì nó đã được gọi là có thể với tham số không chính xác –