开始iphone开发<Objective-c 第八章>

来源:互联网 发布:手机淘宝怎么注册账号 编辑:程序博客网 时间:2024/04/29 13:06

来北京一个星期了,去西藏流浪的计划也未能去实施,那就明年吧,先好好干一年,晃悠太久了,该花一段时间去认真做点事情了。西藏。。明年再去吧。

来北京做iphone开发,大学的时候励志要当程序员,结果大学从做完电赛就一直玩,玩了两三年,几乎荒废了,本来不准备写程序了,各种机缘巧合又开始了代码生涯,人生就是一段修行,既然来了,就好好修行。

iphone开发了解了一下,需要学习Objective-c和xcode,Cocoa类什么的,这几天一直在看Objective-c,以前一直做过程控制,对面向对象还是没有什么了解,要逐步培养自己面向对象思维。下面是自己的读书笔记,写下来,方便以后查阅。前几章写在本子上了。

现在在看《Objective-c 基础教程》


第八章

1。Cocoa Foundation框架中有很多有用的、面向数据的低级类和数据类型

2。Foundation框架拥有100多个类,这些文档存放在/Developer/ADC Reference Library/documentation/index.html


3。test:


 NSAutoreleasePool *pool  = [[NSAutoreleasePool alloc] init];...[pool drain];

//这是Cocoa内存管理,开始创建(通过alloc)并初始化(通过init)了一个NSAutoreleasePool实例,在结尾,池被排空。


4。NSMakeRange(); 快捷方式赋值,for example: NSRange range = NSMakeRange(17,4);


5.几个几何数据类型

typedef struct _NSPoint{float x;float y;}NSPoint;//代表的是笛卡尔平面一个点(x,y)typedef struct _NSSize{float width;float height;}NSSize; //NSSize用来存储长度和宽度typedef struct _NSRect{NSPoint orign;NSSize   size;}NSRect; //矩形数据类型;//Cocoa 也为我们提供了创建数据类型的快捷函数 :NSMakePoint(),NSMakeSize()和NSMakeRect();


6.Cocoa中用来处理字符串的类:NSString


7.NSString 的stringWithFormat :通过格式字符串和参数来创建NSString

+ (id) stringWithFormat: (NSString *) format, …  ;

//后面的 ", …"表示可以接收多个以逗号隔开的参数,前面的 +号表示的概念:

一个类的方法有两种,一种是类方法,一种是实例方法。

类方法有点像静态方法,它属于一个类,二不是属于一个类的实例,定义时前面用“+”号

而实例方法就是属于一个类的实例的方法,定义时前面用“-”号

for example:

+ (id)allobjective-c;//这是一个类方法-(void)dosomething;//这是一个实例方法

//在Objective-c里面没有 public和private的概念,可以认为全是 public,用加号的意思就是其它函数可以直接调用那个这个类中的这个函数,而不用创建这个类的实例。


//about id: Objective-c有一种特殊的数据类型是id,在O-c里,一切东西都是指针形式保存,获取到的就是这个对象在内存的位置。那么id就是你知道这个位置,但是不知道里面是啥的时候的写法。


创建新的字符串:

NSString *height;height * [NSString  stringWithFormat:@"You height is %d feet. %d inches",5,11];


8.  -(unsigned int ) length;  属于NSString,返回的是字符串中的字符个数。

使用方法: unsigned int length = [height length];

注:length方法能够准确的处理国际字符串。

9.字符串比较: isEqualToString,声明:

- (BOOL) isEqualToString: (NSString *) aString; //放回一个BOOL类型


10。isEqualToString 和compare的区别??


11. compare:options:  不区分大小写比较

- (BOOL) isEqualToString: (NSString *) aString; //放回一个BOOL类型

12。判断字符串是否孩包含别的字符串


-(BOOL) hasPrefix:(NSString *)aString;-(BOOL) hasSuffix: (NSString *) aString;


13.NSString是不能改变的,可以改变它的子类 NSMutableString,可以改变这个子类


14。COCOa提供了许多集合类,如:NSArray 和NSDictionary,(他们的实例就是为了存储其它对象而存在的)。

//NSArray :用来存放对象的数组,(类似c中的数组概念,只是这个数组是存放的对象)

NSArray有两个限制:

<1>只能存储Objective-c对象,不能存放C语言的基本数据(如int,float).

<2>不能在NSArray中存储nil(对象的零值或NULL值),因为数组的最后一个值就是nil。


//可以通过类方法arrayWithObjects:创建一个新的NSArray

for example:

//--------->NSArray *array;array = [NSArray arrayWithObjects: @"one", @"two", @"three", nil];//---------<创建了一个由3个对象元素组成的数组NSString


- (unsigned) count; //获得NSArray所包含的对象- (id) objectAtIndex: (unsigned int) index; //获取特定索引处的对象,调用方法 [array  objectAtIndex:  index]


for example:

//------>int i;for (i =0; i< [array count]; i++){NSLog (@"index %d has %@,",i, [array objectAtindex:i ] );} //输出NSArray 数组的个数和内容//------<


15. 在Cocoa中,看到字符“CF",就是与CoreFoundation框架相关的内容。CoreFoundation框架与Cocoa一样,但是是用c写的,内容开源。


16。NSSrting是不可变对象的数组,NSMutableArray  是可变对象的数组,可以对元素进行添加和删除。

创建方法:

+ (id) arrayWithCapacity: (unsigned) numitems; //NSMutableArray通过类方法arrayWithCapacity来创建新的可变数组

for example:

//----------->NSMutableArray *array;array = [NSMutableArray  arrayWithCapacity: 17];//-------------<注意创建NSString是用的arrayWithObjects,创建NSMUtalbeArray是用的arrayWithCapacity


在数组末尾添加对象的方法:

- (void) addobject: (id) anObject;for example: [array addObject: tire];


删除对象:

- (void) removeObjectAtIndex: (unsigned) index;for example: [array removeObjectAtIndex: 1];


17.NSEnumerator 对NSArray进行查找操作(书上写的枚举,开始一直没搞明白),C数组查找元素,只用指针+number就可以了,但是NSArray不行,遍历NSArray必须借助于枚举器 NSEnumerator


向数组请求枚举器"

-(NSEnumerator *) objectEnumerator;


//for example;

NSEumerator *enumerator;enumerator = [array objectEnumerator]


获得枚举器之后,开始while循环,每次循环向枚举器请求nextObject

-(id) nextObject;

nextObject返回nil值时,循环结束


//for example

NSEnumerator *enumerator;enumerator = [array objectEnumerator];id thingie;while(thingie = [enumerator nextObject]){NSLog(@"i found %@,thingie);} //遍历数组的实例


//疑问,书上说“对可变数组进行枚举操作,不能通过添加或删除对象这类方式来改变数组容器”这句话不太明白,可以边遍历边修改内容吗?或者说是对可变数组NSMutableArray 不能边遍历边修改?


18。快速枚举,仅在Object-c 2.0版本


//

for(NSString *string in array){NSLog(@" I found %@",string);} //这个循环体将会遍历数组中的每个元素,并且用变量string存储每个数组值。


19。遍历数组NSArray的三种方法:

<1>.索引 // [array objectAtIndex:i]  ,(  -(unsigned)  objectAtIndex: (unsigned int ) index;

<2>.使用NSEnumerator

<3>,快速枚举



19.NSDictionary

字典:关键字和定义的集合。//字典也被称为散列表或关联数组,和NSString,NSArray一样是不可变的,NSMutableDictionary类允许随意 添加和删除字典元素


创建字典: dictionaryWithObjectsAndKeys:

+ (id) dictionaryWithObjectsAndKeys:

(id) firstObject, ,,, ;

//该方法接收对象和关键字交替存储,以nil值作为终止符号。

for example:

//------------------Tire *t1 =[Tire new];Tire *t2 =[Tire new];Tire *t3= [Tire new];Tire *t4= [Tire new];NSDictionary *tires;tires = [NSDictionary dictionaryWithObjectsAndKeys:t1,@"front-left",t2,@"front-right",t3,@"back-left",t4,@"back-right",nil];//---------------------


查找字典中的值可以用: objectForKey;

- (id) objectForKey: (id) aKey;


for example:

//-------------------Tire *tire = [tires objectForKey:@"back-right"];//------------------如果没有找到,则返回nil值


NSMutableDictionary //可变字典

创建 : dictionaryWithCapacity

+ (id) dictionaryWithCapacity: (unsigned int ) numItems;


setObject:forkey: 给字典添加元素

-(void) setObject:(id) anObject forKey: (id) aKey;


//---------------->另外一种存储轮胎字典的方法NSMutableDictionary *tires;tires = [NSMutableDictionary dictionary];[tires setObject: t1 forKey: @"front-left"];[tires setObject: t2 forKey: @"front-right"];[tires setObject: t3 forKey: @"back-left"];[tires setObject: t4 forKey: @"back-right"];//------------------<如果对字典已有的关键字是用setObject:forKey: 则替代


删除可变字典关键字: removeObjectForKey:方法

-  (void) removeObjectForKey: (id) aKey:for example://-------------------[tires removeObjectForKey:  @"back-left"];



20.    类簇概念,如NSLiterlString .NSCFString,NSSimpleCString,NSBa110fString形成一个与NSString相关的类簇,创建NSString对象时,可能获得上面几个相关的对象。给类簇创建子类是困难的,所以不要试图创建NSString.NSArray.NSDictionary的子类


21。NSNuber //用来包装基本数据类(即把基本数据类型以对象形式实现)


//四个常用的创建方法

+ (NSNumber *) numberWithChar: (char) value;+ (NSNumber *) numberWithInt: (int) value;+ (NSNumber *) numberWithFloat: (float) value;+ (NSNumber *) numberWithBool: (BOOL) value;


for example:

//---------------->NSNumber *number;number = [NSNumber numberWithInt:42];[array addObject: number];[dictionary setObject: number forKey: @"Bork"];


//把数据封装到NSNumber中后,可以通过下面的实例方法重新获得:

- (char) charValue;- (int) intValue;- (float) floatValue;-(BOOL) boolValue;- (NSString *) stringValue;


注:Objective-c语言不支持自动装箱


22.标签的概念:

标签是用于判断对应参数用途的一个标记,名字可以随便取,多参数时,除第一个参数以外,别的参数都要写标签,如:

(void) func2: (int) n  labe1:(int) m  labe2:(int)  p{}

或者写成:

(void) func2: (int) nlabe1: (int) mlabe2:(int) p{}


23.NSValue //NSNumber 是NSValue的一个子类


24. NSNull

+ (NSNull *) null;


添加方法:

[ contact setObject: [NSNUll null] forKey:@"home fax machine"];


访问方法:

id homefax:home fax = [ contact objectForKey: @"home fax machine"];if (home fax == [NSNull null){//..no fax machine}





原创粉丝点击