我觉得Oc继承了C。那么在不少方面与C就很是相像了。
特别是所谓的点语法。
在C语言中间,与Class相似的固然是结构体了。
在C语言,点号java
结构体变量.成员名
(*p).成员名
以及
p->成员名程序员
既然class与结构体类似,那么在Oc中间,
(*p).name也应该是合理的。结果我试了一下,报错了.
我在使用过程当中而且查阅了资料才发现。OC中的点语法居然只是为了照顾C++与JAVA程序员。而并非继承了C语言的语法。objective-c
若是类实现了get与set方法,那么就能够对成员变量使用点语法,好比,以下:.net
#import <Foundation/Foundation.h> @interface Person :NSObject { @public int age; NSString * name; } -(void) sayHi; -(void) setAge:(int)age; -(int)age; @end @implementation Person -(void)sayHi{ NSLog(@"im jerry %d",age); } -(int)age{ return age; } -(void) setAge:(int)age{ self->age=age; } @end int main(int argc, const char * argv[]) { @autoreleasepool { Person* p=[Person new]; p.age=10; p.sayHi; } return 0; } int main(int argc, const char * argv[]) { @autoreleasepool { Person* p=[Person new]; p.age=10; p->age=15; //等价于[p setAge:15];没有set方法将会报错。 NSLog(@"age:%d",p.age);[p age]; //没有get方法将会报错。 p.sayHi; } return 0; }
原来,OC中的点语法只是为了照顾C和JAVA程序员而已。它既不等于C语言中结构体的点号语法,也不等于JAVA的点号语法。code
实际上, p.age=10;虽然简化了代码,可是却很是难以让人理解。这样的点语法实在是奇葩。
p是一个地址变量,若是要访问对象的变量,应该是(*p).age才对。
做为一个java程序员和C程序员,真是被OC的语法给搞晕了。
http://blog.csdn.net/jiangwei0910410003/article/details/41683873
p.age=10; //等价于[p setAge:15];没有set方法将会报错。
其实是对方法的调用。
age会处理成"setAge"。
age并非其成员变量名,实际上应是方法名。对象