来北京一个星期了,去西藏流浪的计划也未能去实施,那就明年吧,先好好干一年,晃悠太久了,该花一段时间去认真做点事情了。西藏。。明年再去吧。
来北京做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>.索引 @H_419_350@// [array objectAtIndex:i] ,( -(unsigned) objectAtIndex: (unsigned int ) index;
<2>.使用NSEnumerator
<3>,快速枚举
19.NSDictionary
字典:关键字和定义的集合。//字典也被称为散列表或关联数组,和Nsstring,NSArray一样是不可变的,NSMutableDictionary类允许随意 添加和删除字典元素
创建字典: @H_419_350@dictionaryWithObjectsAndKeys:
+ (ID) dictionaryWithObjectsAndKeys:
@H_419_350@@H_419_350@@H_419_350@(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];//---------------------
查找字典中的值可以用: @H_419_350@objectForKey;
- (ID) objectForKey: (ID) aKey;
for example:
//-------------------Tire *tire = [tires objectForKey:@"back-right"];//------------------如果没有找到,则返回nil值
NSMutableDictionary @H_419_350@//可变字典
创建 : @H_419_350@dictionaryWithCapacity
+ (ID) dictionaryWithCapacity: (unsigned int ) numItems;
setobject:forkey: @H_419_350@给字典添加元素
-(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: 则替代
删除可变字典关键字: @H_419_350@removeObjectForKey:方法
- (voID) removeObjectForKey: (ID) aKey:for example://-------------------[tires removeObjectForKey: @"back-left"];
20. 类簇概念,如NSliterlString .NSCFString,NSSimpleCString,NSBa110fString形成一个与Nsstring相关的类簇,创建Nsstring对象时,可能获得上面几个相关的对象。给类簇创建子类是困难的,所以不要试图创建Nsstring.NSArray.NSDictionary的子类
21。NSNuber @H_419_350@//用来包装基本数据类(即把基本数据类型以对象形式实现)
//四个常用的创建方法
+ (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.标签的概念:
标签是用于判断对应参数用途的一个标记@H_419_350@,名字可以随便取,多参数时,除第一个参数以外,别的参数都要写标签,如:
(voID) func2: (int) n labe1:(int) m labe2:(int) p{}或者写成:
(voID) func2: (int) nlabe1: (int) mlabe2:(int) p{}
23.NSValue @H_419_350@@H_419_350@//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}
以上是内存溢出为你收集整理的开始iphone开发<Objective-c 第八章>全部内容,希望文章能够帮你解决开始iphone开发<Objective-c 第八章>所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)