對Objective C語言的吐槽

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

相關文章
相關標籤/搜索