アイデア1:作成時にブロックと説明を記録し、手動で識別します。
アイデア2:デバッグと実験のためにのみ、自己責任でを使用してください。 description
メソッドをNSBlock
に追加し、関連する説明オブジェクトを各ブロックに追加します。私のテストアプリ:
@implementation AppDelegate
static char kAssociatedObjectKey;
typedef void (^MyBlockType)(void);
- (NSString *)myDescription {
NSString *description = [super description];
id object = objc_getAssociatedObject(self, &kAssociatedObjectKey);
if (object)
description = [description stringByAppendingFormat:@" %@", object];
return description;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
Class blockClass = NSClassFromString(@"NSBlock");
Method descriptionMethod = class_getInstanceMethod([self class], @selector(myDescription));
BOOL didAddMethod = class_addMethod(blockClass, @selector(description),
method_getImplementation(descriptionMethod), method_getTypeEncoding(descriptionMethod));
MyBlockType a = ^{};
objc_setAssociatedObject(a, &kAssociatedObjectKey, @"block a", OBJC_ASSOCIATION_RETAIN_NONATOMIC);
MyBlockType b = ^{};
objc_setAssociatedObject(b, &kAssociatedObjectKey, @"block b", OBJC_ASSOCIATION_RETAIN_NONATOMIC);
MyBlockType c = ^{};
objc_setAssociatedObject(c, &kAssociatedObjectKey, @"block c", OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSArray *array = @[a, b, c];
NSLog(@"%@", array);
}
@end
PS。おそらく、アイデア2は良い考えではないでしょう。私はObjective-Cランタイムに慣れていませんが、私が何をやっているのか理解していると思います。