首先说一下底层的实现:
ObjC只是在C上面稍微包装了一层运行时。编译的时候,llvm会把objc的消息转换成转换成C的函数调用....所以,这里没有C++的namespace、运算符重载之类的特性。
[UIColor colorWithRed:1.0 green:0.5 blue:1.0 alpha:1.0];
这个方法的调用实际会被llvm翻译成类似下面这样的运行时C方法调用:
id receiver = NSClassFromString(@"UIColor ");
SEL name = @
selector(colorWithRed:green:blue:alpha:);
objc_msgSend(receiver, name, 1.0, 0.5, 1.0, 1.0);
看这个msgSend,就是说,苹果实际是想强调"消息发送"这种动态的特性的,这个C++、Java之类语言的编译时绑定有很大的差别。只是大家交流起来,还是用"invoke this method"说的方便。
之后说一下这个语法:
这个方法名是 "colorWithRed:green:blue:alpha:",这是一个完整的"方法名",不可以分割,包含冒号。
这个方法和 "colorWithRed" 是完全不同的两个方法。(如果你直接调用"colorWithRed"这个方法的话,是没有的。。LZ在15楼的理解不对)。
这种语法的好处就是,代码能真正做到自解释,更加贴近自然语言;坏处就是冗长、和其他变成语言的语法格格不入。。
LZ好像是带着敌意去学习新语言,这不是给自己找气生嘛~~ 一旦接受了这种设定,也就不会那么难受了~~
推荐LZ看看这个:
http://www.zhihu.com/question/20226719