对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并非其成员变量名,实际上应是方法名。对象

相关文章
相关标签/搜索