代码改变世界

【objc】objective-c学习(1)

2012-08-28 21:19  Loull  阅读(283)  评论(0编辑  收藏  举报

一、开发环境

使用xcode,可以再app store里面下载,但我嫌速度慢,自己下载安装了,还安装了command line tool,不知道有没有重复。

用的是4.4.1版本,很多教程是老版本的,所以有些东西不太一样。

创建命令行程序,使用ObjC:

新建项目->mac---application---command line tool--->选择Foundation。。那什么的,就是用ObjC的命令行程序。

 

二、基本语法

1、使用#import,可以保证头文件只被引用一次,少了#ifdef,#endif的麻烦。

2、Foundation是框架,框架是一种聚集在一个单元的部件集合,包含头文件、库、图像、声音文件等。Cocoa的组成部分由Foundation和Application Kit框架。

3、Cocoa对其所有函数、常量和类型名称都添加了“NS”前缀。

NSLog(@”Hello World”);

@表示字符串作为NSString来处理

4、BOOL类型:具有YES和NO值,

与C的bool类型不同,非零的BOOL值不一定是NO。

 

三、面向对象

1、void drawShape(id shapes[], int count)

{

    int i;

    for(i = 0; i < count; i++){

        id shape = shapes[i];

        [shape draw];

    }

}

id:是泛型,用于表示任何类的对象

[shape draw]可以理解成向shape对象发送draw消息;或是让shape对象调用draw方法。

 

2、定义接口@interface

@interface Circle : NSOject    //继承

{

   ShapeColor fillColor;

   ShapeRect  bounds;

}

-(void) setFillColor : (ShapeColor) fillColor;  //类型用()括起,-短横表示声明方法而不是函数

-(void) draw;

@end  //Circle

 

两个参数的方法调用

[textThing setStringValue: @”hell0”

              color: kBlueColor];

 

3、接口/方法实现@implementation

4、对象实例化   [Circle new];

  id shape = [Circle new ];

 

5、继承 , 单继承,self关键字指向对象本身,super关键字引用父类成员

6、复合:复合是通过包含作为实例变量的对象指针实现的。(对象之间的组合)

@interface Unicycle : NSObject

{

    Tire *tire;

}

7、存取方法。不将get作为getter方法的前缀

 

四、头文件.h,实现问.m

1、循环依赖关系,@class很有用

即A类使用B类,B类也使用A类,如果试图#import语句让这两个类相互引用,会出现编译出错。

可以再A.h中使用@class B, B.h中使用@class A

@class指令能减少编译时间,它告诉编译器“相信我,你最终能够了解这个名称的类”

 

五、使用Xcode,快捷键

command [ 左移代码块

tab 接受代码提示

esc 显示代码提示菜单

control-. 循环浏览代码提示

control-F 前移光标

control-B后移

control-P上移

control-N下移

control-A行首

control-E行尾

control-D删除光标右边的字符

control--K删除行

command-alt-P继续(调试)