Objective-C并不像看起来的那么难[转]

因为没有能在转的作者那找到他转自谁的,所以不能给出地址


本人见识过很多的开发语言,C、C++、Java、Python、Ruby、Lua、PHP,看得多了,基本上初看一种新的语言也能很快猜出个大概这个语言的语法特点,但是初看Objective-C的时候,完全被震住了,会有一种雾里看花的感觉!

但是通过简单的阅读一些文档后,觉得Objective-C并不像外表看起来的那么恐怖,那么高不可攀,在此就简单总结一下Objective-C的特点。


Objective-C特性概括


  • Objective-C是C的超集,也就是说C有的Objective-C都有,Objective-C多了C自身没有的OO(面向对象)特性。
  • Objective-C默认扩展名为 .m 。头文件扩展名跟普通C一样 .h 。
  • Objective-C推荐引入头文件的方式为:#import ,好处是同一个头文件只引入一次,而不用多余的代码。
  • Objective-C定义类的方法:
    @interface Person { 
        int age; 
        int hight; 


    -(int) func1; 
    -(void) func2: (int) n; 
    @end

    @interface 与 @end之间为类的定义,@interface后面 { ... } 之间定义类的成员变量,
    下面定义类的方法:(返回值类型) 方法名:(参数类型)参数
  • Objective-C实现类的方法:
    @implementation Person 
    -(void) func1 { 
        printf( "%i/%i", age, hight ); 


    -(void) func2: (int) n { 
        age = n; 

    @end

    @implementation 与 @end 之间为类的实现
  • 类的实例化:
    Person *ps = [[Person alloc] init];
    这里【不能】像C++那样:Person ps; 来实例化一个Person的变量。另Objective-C都是使用指针来操作对象的
  • 类的方法调用:
    [ps func1]; 
    [ps func2: 10]

    前者为没有参数的方法调用,后者为有一个参数的方法调用。
  • 多参数方法的定义及调用:
    -(void) func2: (int) n Label2: (int) m Label3: (int) p;    //此句放到 @interface @end类方法定义中 

    //下面的代码放到 @implementation @end之间。 
    -(void) func2: (int) n Label2: (int) m Label3: (int) p{ 
        age = n; 
        height = m; 
        sth = p;  //此处第三个仅用于表达多个参数的情况,与第一个例子不一致。 


    //下面为调用代码 
    [ps func2: 53 Label2: 89 Label3: 982];

    这里可能很多人觉得怪异,为何后面的参数都有标签,而第一个没有。
    先说下什么是标签(像上面的Label2,Label3):标签是用于判断对应参数用途的一个标记,也就是如果你没有心情可以随便取名,当然推荐取标签名的时候最好能反应这个参数的用途,或这个方法在当前这些参数时候的用途。
    为何第一个参数没有标签呢?其实你可以把第一个方法名当成是第一个参数的标签,这样每一个参数都有一个标签,然后一串的参数作为【信号】发送给对象。
    写的时候,为了美观,代码整理成如下样子:
    [ps func2: 53  
        Label2: 89  
        Label3: 982];

    这样一个标签对应一个参数,非常直观。
  • 访问权限:Objective-C也像C++一样有 public private protect 三种访问权限,默认的权限是 protected
    public 关键字修饰资源,可以在任何地方访问。
    protected 关键字修饰资源,可以在类内和其子类里访问。
    private 关键字修饰资源,只能在类内访问。
  • 外部访问类的public成员方法:
    a->publicVar = 5;   //其中 a是一个对象 publicVar是一个public的成员
  • 因为Objective-C里面成员变量默认使用protected(如果声明为public不太安全),也就是本类,及子类中能访问,而外部不能直接访问,所以如果你想要外部访问或改变成员变量的值就要定义一些如 setXXX getXXX(O-C中默认是没有get的,而直接是XXX)的方法。setXXX用来设置成员变量值,而 XXX方法用来取得成员变量的值为了简化操作,O-C引入了两个关键字 @property 和 @synthesize。就不用写一堆繁杂的代码
    //定义的时候 
    @interface Fraction: NSObject { 
        int numerator; 
        int denominator; 


    -(void) print; 

    //-(void) setDenominator: (int) d; 
    //-(int) denominator; 
    @property (retain) int denominator;   //等于上面两句去掉注释 

    //-(void) setNumerator: (int) n; 
    //-(int) numerator; 
    @property (retain) int numerator;   //等于上面两句去掉注释 
    @end

    //实现的时候 
    @implementation  

    @synthesize denominator; 
    @synthesize numerator; 

    @end
  • 声明property的语法为:
    @property (参数) 类型 名字;

    分为三类:
    1,读写属性(readwrite/readonly):顾名思义不用多说
    2,设置属性(assign/retain/copy):assign为直接赋值,适合数值类型的;retain最常用,一般对象都用这个代表保留;copy为复制多用于字符串
    3,原子性atomicity(nonatomic):默认是atomic,如果是多线程的程序要保证某一个成员变量的一致性,须使用 atomic。
  • O-C中的 nil 其实是一个类型为 id 的对象,所以可以给 nil 传递信息如 [nil message1]。
  • O-C中的BOOL型数据包括 YES 及 NO,而非 TRUE 及 FALSE。
  • O-C中的 Protocol 就像C++中的 接口
    //定义定义协议 
    @protocol Printing 
    -(void) print; 
    @end 

    //引入协议 
    @interface Fraction: NSObject <Printing, NSCopying> { 
        int numerator; 
        int denominator; 


    -(Fraction*) initWithNumerator: (int) n denominator: (int) d; 
    -(void) setNumerator: (int) d; 
    -(void) setDenominator: (int) d; 
    -(void) setNumerator: (int) n andDenominator: (int) d; 
    -(int) numerator; 
    -(int) denominator; 
    @end 

    //在主文件中只要对应实现 print这个方法就行了。
  • O-C没有方法重载 over loading
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值