黑马程序员---Objective-C学习笔记之一

来源:互联网 发布:橄榄油哪个牌子好 知乎 编辑:程序博客网 时间:2024/05/18 11:03
------- android培训、java培训、期待与您交流! ----------

基础语法

BOOL本质是char类型的别名,1为true并被定义为YES,0为false被定义为NO。

 

OC中增加_Complex用来处理复数,增加_Imaginary处理抽象数字。

 

#import类似于C/C++中#include,用来防止头文件重复包含。

但是,使用include要注意重复引用的问题:

class A,class B都引用了class C,class D若引用class A与class B,就会报重复引用的错误,#import则没有这个问题。

 

OC提供一个新的打印输出函数NSLog,类似于C语言中printf,支持转义字符,不写\n也可自动换行。

NSLog中使用的格式控制符总结如下:

 

面向对象

一个类包括以下两部分:

@interface部分                      //声明,描述类、类的数据成分以及类的方法

@implementation部分           //实现,实现这些方法的实际代码

格式类似于:

@interface NewClassName:  ParentClassName

{

       //成员声明

}

//方法声明

@end

 

@implementation NewClassName

//方法定义

@end

 

函数开头的(-)号或者(+)号表示:

(-)该方法是实例方法(对类的特定实例执行一些操作);

(+)是类方法(即对类本身执行某些操作的方法,例如创建类的新实例)

 

示例:

//-------- @interface section--------@interface Fraction: NSObject{         intnumberator;         intdenominator;} - (void) print;- (void) setNumberator: (int) n;- (void) setDenominator: (int) d;- (void) setTo: (int) n over: (int) d; @end //---------implementation section------@implementation Fraction-(void) print{         NSLog(@"%i/%i",numberator, denominator);} - (void) setNumberator: (int) n{         numberator= n;} - (void) setDenominator: (int) d{         denominator= d;} - (void) setTo: (int) n over: (int) d{         numerator= n;         denominator= d;}@end int main (int argc, const char *argv[]){   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];                             //在此处输入Objective-C代码   Fraction *aFraction = [[Fraction alloc] init];   [aFraction setTo: 1 over: 2];   [aFraction print];      [pool drain];   return 0;}

函数具有多个参数的方法:

-/+ (return type) function_name :(parameter type) parameter1 otherParameter : (parameter_type) parameter2;

如果只有一个参数,在: 后面声明参数的类型和名称;如果有多个参数的话,每个参数前面都要有一个 : , 然后接着是参数类型和参数名称。可是大家可能还是觉得很奇怪。比如上面这个例子中,otherParameter 这个是什么意思,在objective c 中,对于有多个参数的函数,可以理解为将函数的名称拆

成了几个部分,每个部分都是对紧接着的参数的一个解释。

如在C++中:

void initializeRectangle(int x1, int y1,int x2, int y2);

但并不知道这些参数都是什么意思;但在objective c 中,可以这样声明:

void initializeRectange: (int)x1 LeftUpY:(int)y1 RightBottomX: (int)x2

RightBottomY:(int)y2;

 

方法的调用:

[ 类或实例的名称 方法(消息)];

类似于C++中对象.方法或者 对象->方法

 

对象的获取:

Fraction*aFraction = [[Fraction alloc] init];或者

Fraction*aFraction = [Fraction new];

 

合成存取器的方法:

在接口部分使用@property表示属性

在实现部分使用@synthesize指令

 

从Objective-C 2.0开始,可使用.运算符访问属性及赋值,示例如下:

Instance.property= value  <==>   [instance setProperty: value]

 

OC中所有的对象都是指针。

 

实例变量的初始化值默认为0

 

实例变量作用域的指令:

@protected 实例变量可被该类及任何子类中定义的方法直接访问(默认的情况)。

@private 实例变量可被定义在该类的方法直接访问,不能被子类定义的方法直接访问。

@public 实例变量可被该类中定义的方法直接访问,也可被其他类或模块中定义的方法访问。使得其他方法或函数可以通过(->)来访问实例变量(不推荐用)。

@package 对于64 位图像,可以在实现该类的图像的任何地方访问这个实例变量。

 

self/super关键字

self/super用来指名对象是当前方法的接受者,格式:[self/super 方法名(消息)]

self会从自身类寻找处理该消息的方法,super会从父类中寻找处理该消息的方法,如果找不到,就会一直想上找,都没找到就会报错。

0 0