我覺得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並非其成員變量名,實際上應是方法名。對象