对Objective C语言的吐槽

发布时间:2019-06-22 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了对Objective C语言的吐槽脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_777_1@我以为Oc继承了C。那么在很多方面与C就非常相像了。
特别是所谓的点语法。
c语言中间,与Class类似的当然是结构体了。
在C语言,点号

结构体变量.成员名
(*p).成员名
以及
p->成员名

既然class与结构体相似,那么在Oc中间,
(*p).name也应该是合理的。结果我试了一下,报错了.
我在使用过程中并且查阅了资料才发现。OC中的点语法竟然只是为了照顾C++与JAVA程序员。而并不是继承了C语言的语法。

如果类实现了get与set方法,那么就可以对成员变量使用点语法,比如,如下:

#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的点号语法。

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

脚本宝典总结

以上是脚本宝典为你收集整理的对Objective C语言的吐槽全部内容,希望文章能够帮你解决对Objective C语言的吐槽所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。