介绍一个很有趣的工具ObjCViz,这个工具的作用简单说来,就是把Objective-C的类转化为图表(参见正文中的图形),这样就可以清晰的看出各个类之间的关系和参数、类成员之间的关系。

 

比如如下的Objective-C的类:

 

@interface Bu : NSObject 

{

NSString* superclassIvar;

}

@end

 

@interface Meu : NSObject 

{

id obj;

}

@end

 

@implementation Meu 

 

-(id)init

{

[super init];

obj = @"hello";

return self;

}

 

@end

 

 

@interface Zo : Bu 

{

NSString* d;

id e;

}

@end

 

@implementation Zo 

 

-(id)init

{

[super init];

e = [NSScanner 

scannerWithString:@"scannedString"]

[e retain];

return self;

}

 

@end

 

@interface Ga : NSObject 

{

NSString* strIvar;

NSMutableArray* arrayIvar;

NSMutableDictionary* dictIvar;

Zo* boIvar;

}

@end

 

@implementation Ga 

 

-(id)init

{

[super init];

strIvar = @"aString";

boIvar = [[Zo alloc] init];

arrayIvar = [[NSArray alloc

initWithObjects:@"aStringInArray",

[NSDate date], nil];

dictIvar = [[NSMutableDictionary alloc

initWithObjectsAndKeys:boIvar,@"Key1",@"Obj2",@"Key2",nil];

return self;

}

 

@end

 

可以将其转化为下面格式的文本:

 

digraph ObjC {

L001 [label="Ga", style=rounded, shape=box];

L001 -> L002 [label="boIvar",fontsize=12];

L001 -> L003 [label="strIvar",fontsize=12];

L001 -> L004 [label="arrayIvar",fontsize=12];

L001 -> L007 [label="dictIvar",fontsize=12];

L002 [label="Zo", style=rounded, shape=box];  

L002 -> (null) [label="d",fontsize=12];

L002 -> (null) [label="superclassIvar",fontsize=12];

L002 -> L009 [label="e",fontsize=12];

L003 [label="@\"aString\""];  

L004 [label="{NSCFArray|{|}}",shape=Mrecord];

        L004:f0 -> L005 [label="0",fontsize=12];

        L004:f1 -> L006 [label="1",fontsize=12];

L005 [label="@\"aStringInArray\""];

L006 [label="NSCFDate", style=rounded, shape=box];

L007 [label="{NSCFDictionary|{ Key2| Key1}}",shape=Mrecord];

L007:f0 -> L008 [label="Key2",fontsize=12];

L007:f1 -> L002 [label="Key1",fontsize=12];

L008 [label="@\"Obj2\""];

L009 [label="NSConcreteScanner", style=rounded, shape=box];

L009 -> L010 [label="scanString",fontsize=12];

L009 -> L011 [label="skipSet",fontsize=12];

L009 -> (null) [label="invertedSkipSet",fontsize=12];

L009 -> (null) [label="locale",fontsize=12];

L010 [label="@\"scannedString\""];

L011 [label="NSBuiltinCharacterSet", style=rounded, shape=box];

L011 -> L012 [label="expandedset",fontsize=12];

L012 [label="NSCFCharacterSet", style=rounded, shape=box];

L013 [label="nil"];

}

 

而这段文本可以通过GraphViz这个图表工具转化为下面的图表:

 

 

工具的作者是Olivier Gutknecht,下载地址为:

 

http://people.no-distance.net/ol/software/objcviz/

 

点击左侧的Source Code可以下载。