现在的位置: 首页 > 综合 > 正文

Obj-C 初识

2012年10月12日 ⁄ 综合 ⁄ 共 4110字 ⁄ 字号 评论关闭

1、Obj-C代码的扩展名为“.m”.

 

2、Obj-C的要包含头文件时,可以使用  #include  但更一般的使用  #import  ( 由GCC编译器提供),后者可以保证头文件只被包含一次(l类似C中的#ifdef)。

 

3有关Cocoa 的框架,可参照

http://www.cocoachina.com/newbie/basic/2009/0611/130.html

 4、hello Objecitve-C

#import <Foundation/Foundation.h>

Int main(int argc, const char *arge[])

{

  NSLog (@”Hello Obj-C!”);

  Return (0);

}

 

NSLog()函数中的NS:Cocoa对所有函数、常量和类型名称都添加了NS前缀。(NSLog(@”%d is  a  %@”,a,@”num”);)

@”Hello Obj-C!”:obj-c添加的特性,双引号中的 字符串前有一个@,表示引用的字符串应该作为Cocoa的NSString元素处理。

 

5、c中的bool的true和false对应Cocoa中的BOOL的YES和NO()1个字节.(注意:在obj-c中不能理解 非零值为YES,1不等于YES)

 

6、Id 类型

      在Objective-C 中,id 类型是一个独特的数据类型。在概念上,类似Java 的Object 类,可以转换为任何数据类型。换句话说,id 类型的变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。id 是一个指向任何一个继承了Object(或者NSObject)类的对象。需要注意的是id 是一个指针,所以在使用id的时候不需要加星号。http://book.51cto.com/art/201105/262238.htm

7、obj-c中的方括号:

用于通知某个对象该干什么。在方括号中,第一项是对象,其余部分是你需要对象执行的操作(调用函数)。

 

8、方法声明与调用:

@interface Circle : NSObject

{

  ShapeColor  fillColor;

  ShapeRect   bounds;

}//创建两个实例变量

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

- (void) draw;

@end // Circle

 

 

@interface Circle : NSObject  ---定义了Circle的 类,该类是基于NSObject的,即继承。

 

- (void) draw; 前面的短线表示这是obj-c中的方法声明,这是一种区分函数原型与方法声明的方式;void代表返回值为空,draw为方法名。

 

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

这两个声明的方法中都有一个参数, (参数类型)参数 

有如:

-(void) setTo: (int) n over: (int) d

{
numerator = n;
denominator = d;
}

 [aFraction setTo: 100 over: 200];//调用

注:objective-c 的方法参数名有些怪异,第一个参数是没有参数名的,如果硬要说有,那就是方法名,

统一说来,见到冒号,冒号前面那个就是参数名。 

 

再举例,没有参数名的方法定义与调用:

 

-(int) set: (int) n: (int) d;

[aFraction set: 1 : 3];//调用

http://www.cnblogs.com/54007/archive/2011/02/10/1950801.html

@interface为类的声明,一般在头文件中;@implementation为类的实现,一般在”.m”文件中,接下来就是各个方法的定义,不必按照@interface中的顺序定义方法,甚至可以定义在@interface中无相应声明的方法。@interface和@implementation方法的形式参数名要避免相同。

 

9、实例化对象:id ivars = [Class new];

 

10、每个方法的调用都包括了一个名为self的隐藏函数,同时对象本身。使用self参数后,方法可以查找并操作对象的数据(this指针)。

 

11、继承:e.g. @interface Circle : NSObject

   Obj-c不支持多继承,例如:@interface Circle : NSObject , PrintableObject是不能够被编译器识别的。但是可以从其他特性吸收多继承的优点:如分类、协议。

 

12、重构:移动和简化代码的方式。

 

13、obj-c中的super相当于调用父类的方法,在重写方法中充分利用超类代码。

 

14、description:

-------------------------------------------------------

    @interface Tire :NSobject
@end

@implementation tire

-(NSstring *) description
{
return(@"i am a tire");
}

 

    NSLog (@"%@", tires);

 

descriptong方法默认返回对象的描述信息,
NSLog(@"%@", objectA);这会自动调用objectA的descriptong方法来输出ObjectA的描述信息,
当我们重写某个类的descriptong方法后,
再次输出NSLog(@"%@", objectA);时,就会调用我们覆写的descriptong方法,这样就达到自定义对象的描述信息!!!

 

15、存取方法(accessor method):用来读取或改变对象特定属性的方法。如setter、getter方      法(注意:setter方法的方法名一般加set前缀,e.g.setEngine,getter则根据返回的属性的名称来命名,e.g.engine.因为get在cocoa中有特殊含义,它意味着这个方法会通过你当做参数传入的指针来返回数值)。

在对其他对象的属性进行操作时,应该始终使用对象所提供的存取方法,永远不要直接改变其他对象属性的数值。如,main函数不应直接访问类的实例变量。这也是间接的一种体现。

 

16、exit()函数:exit(1)表示发生错误后退出程序,exit(0)表示正常退出。参数0和1是返回给操作系统的,操作系统根据参数判断程序是否正常执行了。(that is 防御式编程)

 

17、Obj-C中所有对象间的交互都是通过指针实现的。

 

18、@class  某些情况可代替#import ,减少编译次数,e.g.在复合类中的头文件中使用。。。

 

19、一些有用的数据类型(struct):NSRange、NSPoint、NSSize、NSRect…..

 

20、NSString类的方法

  创建字符串  +(id) stringWithFormat : (NSString *) format,……;

  e.g.   NSString *height;

height = [ NSString stringWithFormat: @”height is %d feet, %d inchs”,5 , 11];

  如果在声明方法时添加了加号,表示这个方法定义为类方法(工厂方法)。这个方法属于类对象(而不是类的实例对象)并且通常用于创建新的实例。

  大小 -(unsigned int) length;

  e.g.   unsigned int length = [height length];

  比较 – (BOOL) isEqulToString: (NSString *) aSting; 还有compare方法

  检查字符串内是否还包含别的字符串:hasPrefix  hasSuffix

 

NSSting为不可改变的字符串类型,其子类NSMutableString为可修给的字符串类型。

NSMutableString类的方法:

  创建  stringWithCapacity,当然stringWithFormat也可以

  添加字符: appendString 、 appendFormat

  删减字符: deleteCharactersInRange与rangeOfString集合使用

21、NSArray类:

  创建 arrayWithObjects方法

  e.g.   NSArray *array;

array = [NSArray arrayWithObjecrs: @”one”, @”two”, @”three” , nil];(nil空,表列表结束)

[array count]可获得数组个数

[array objectAtIndex:i]  可得到数组的内容(索引遍历)

切分数组componentsSeparatedByString

合并数组componentsJoinedByStrring

可变数组NSMutableArray类:addObject,removedObjectAtIndex

22、枚举器NSEnumerator

NSEnumerator *enumerator;

Enumerator = [array objectEnumerator];//向数组请求枚举器

id thingie;

while(thingie = [enumerator nextObject]){

 NSLog(@”I found %@”, thingie);

}

23、快速枚举:

  for(NSSting *string in array){

      NSLog(@”I found %@”, string);

}

24、NSDictionary字典  散列表  关联数组:在给定的key(通常是NSString)下存储一个value(可以使任何类型的对象)

Of course, 也有NSMutableDictionary

25、NSNumber:Cocoa用来包装基本数据类型的类。

    NSValue可以包装任意值

抱歉!评论已关闭.