• 洪小瑶学IOS(一):准备起航 <ObjectiveC基础教程>笔记


    做flash开发一枚,因为ANE等各种发展问题,决定再投资自己学习IOS开发。

    IOS开发,目的其一:ANE,目的其二:兴趣。

    资料准备:  也准备了英文版本,怕临时翻译问题。

    设备:apple air  iphone 4s   ipad2  各一台。

    Objective-C基础教程1-6章节

    ective-C基础教程1-6章后,对一些东西的笔记,并不是完整的教程,只是类似拾遗,将一些不同的,不熟悉的东西记下来

    一切都源于Hello World 恒古不变的定律,熟悉一门语言结构最快也就是这个万能的程序了,Objective-C扩展名为.m(之后书中也有提到.mm就是C++风格)

    Objective-c代码  收藏代码
    1. #import <Foundation/Foundation.h>  
    2. int main(int argc, const char *argv[]){  
    3.     NSLog(@"Hello Objective-C");  
    4.     return (0);  
    5. }  

    其中NSLog方法是Objective-C专属的一种类型,所有cocoa的对象都被冠以了NS前缀,作为区分。传入的参数@""表示字符串作为NSString被处理,程序其余部分和C类似,#import的含义也不言而喻

    布尔值

    Objective-C中的布尔变量有些许小的不同,参数类型为BOOL,值为YES/NO,其中YES为1,NO为0,占8位

    需要注意的是,如果将一个int,short这样的值赋给BOOL,只有低位字节会发挥作用,这是特别要注意的,因为这意味着,并不是传统认为的,非零即为true

    Objective-C中有一种特有的语法:[对象 操作] 这在之后会一直看到

    关于Objective-C中的OOP

    @interface

    Objective-c代码  收藏代码
    1. @interface Circle:NSObject  
    2. {  
    3.     ShapeColor color;  
    4.     ShapeRect bounds;  
    5. }  
    6. -(void) setFillColor: (ShapeColor) color;  
    7. -(void) setBounds: (ShapeRect) bounds;  
    8. -(void) draw;  
    9. @end  

    以上就是标准的一个@interface定义,应该很好理解,Circle含有2个变量color,bounds,拥有3个方法

    特别注意方法的申明方式 

    (void) 表示返回类型 之后是方法名及参数

    draw方法不含参数 也不用:

    对于多个参数的方法申明

    -(void) setTire: (Tire *) tire atIndex:(int) index;(这里的第二个参数看起来有些奇怪,但是在之后调用方法的过程中,atIndex会被用到)

    Objective-C的方法调用使用了一种被称为中缀符的东西

    看一下分别调用无参,1参和多参的语法

    Objective-c代码  收藏代码
    1. [circle draw];  
    2. [circle setFillColor:kRedColor];  
    3. [car setTire:tire atIndex:2];<span> </span>  

    @implementation

    与名字相同,实现,就是对@interface所申明内容的具体实现

    Objective-c代码  收藏代码
    1. @implementation  
    2. -(void) setFillColor:(ShapeColor c)  
    3. {  
    4.     color=c;  
    5. }  
    6. @end  

    这里的color=c其实就相当于self.color=c(这里我又要做类比了,目前的认识self就相当于java中的this指针)

    有了@interface和@implementation之后,我们对一个类(对象)的定义就算完成,那么如何实例化一个对象

    Objective-c代码  收藏代码
    1. id shapes[3];  
    2. shapes[0]=[Circle new];  
    3. [shpaes[0] setBounds:rect];  
    4. ...  

    这里又看到一个新的东西id,它是一种指向某个对象的指针,目前为止只是看到这一种用法,也没有太多认识,简单的被我理解成了索引

    之后看到了new对象的方法[Circle new],再之后是调用对象的方法设置具体的参数

    继承

    Objective-c代码  收藏代码
    1. @interface Circle:Shape  

    很简单的方法,Objective-C在继承规则上于java,C#无异,不允许多重继承,不过既然有接口(或者应该叫协议),那么自然同java一样,达到相同的目的自然不难,同样的,子类可以调用父类的方法,通过super,比如[super setColor:c];

    Ojbective-C中的空值为nil

    接下来 来看一个Car是被如何自动构建的

    Objective-c代码  收藏代码
    1. @implementation Car  
    2. -(id) init  
    3. {  
    4.     if(self=[super init]){  
    5.         engine=[Engine new];  
    6.         ...  
    7.     }  
    8.     return (self);  
    9. }  

    这一段有些理解不能,在书中的注释中说到,这里指如果超类可以完成所需的一次性初始化,需要调用[super init]。init方法的返回值id描述了倍初始化的对象。将[super init]的结果赋给self是Objective-C的标准惯例。

    Objective-C中一样有getter/setter方法,但是在命名规则上需要注意

    Objective-c代码  收藏代码
    1. -(Engine *)engine;  
    2. -(void) setEngine: (Engine *) engine;  

    在set方法中 依然采取setXXX的方式 但是get方法则直接采用XXX 而非getXXX,以免混淆

    拆分

    一般将@interface部分放入.h文件中

    Objective-c代码  收藏代码
    1. #import <Cocoa/Cocoa.h>  
    2. @interface Tire:NSObject  
    3. @end  

    将其他部分放在.m中,在.m中记得引入该头文件

    #import "Tire.h"

    import下<>代表系统头文件 ""代表本地头文件

    关键词@class 告诉编译器此处是一个类,还需要通过指针进行传递

    Objective-c代码  收藏代码
    1. @class Tire  
    2. @class Engine  
    3. ...  
    4. Engine *engine  

    注意这只有在通过指针指向其他类的情况下可用,减少编译器负担,在继承的情况下不可用,因为他需要了解超类的信息

    推荐oc视频教程:http://www.youku.com/playlist_show/id_4545842.html

  • 相关阅读:
    MASM32汇编中关于栈的总结
    《2022牛客寒假算法基础集训营1》
    《Denso Create Programming Contest 2022(AtCoder Beginner Contest 239)》
    最短路 JAVA
    《 Codeforces Round #122 (Div. 1) B》
    AtCoder Regular Contest 135
    《2022牛客寒假算法基础集训营3》
    《整数拼接》
    《AtCoder Regular Contest 134 C》
    java的一些操作
  • 原文地址:https://www.cnblogs.com/bulolo/p/2940144.html
Copyright © 2020-2023  润新知