下载  >  移动开发  >  iOS  > IOS开发系列—Objective-C之Foundation框架 - KenshinCui - 博客园.pdf

IOS开发系列—Objective-C之Foundation框架 - KenshinCui - 博客园.pdf 评分

IOS开发系列—Objective-C之Foundation框架 - KenshinCui - 博客园.pdf
Objective-C Foundation Continued 阅读排行榜 2015年1月(1) NotifeCaliane 2014年12月(2) NSNotification Center NSDistributed Notification center 1.OS开发系列- UITableview全面解析 2014年11月(2) NSNotification Queue (54906) Archiving and Serial ization 2014年10月(1) 2.jOS开发系列-音频播放、录音、视频 SCoder TNSArchiver Property ListSerialization FNSKeyedArchiver 播放、拍照、视频录制(42464) 2014年9月(5) NSPortCoder 3.iOS开发系列-视图切换(41826) 2014年8月(5) NSUnarchiver 4.iOS开发系列文章(持续更新…) 2014年7月(11) objoctive- C Langunge Services NSAssertionHandler (41436 2013年9月(2) NSAutorelease Pool SClassDescription 5.IOS开发系列-1OS程序开发概览 2013年8月(3) HNSGarbagecollector (41144) 2012年2月(1) INvocation NSMethodSignature sUndoManager 随笔分类 2012年1月(1) NSObject Scripting 2011年12月(4) NSScriptClassDescription Net(7) NSAppleEvent Descriptor NSClonecomimand 2011年11月(4) NSAppleEventManager Nsclosecommand C(3) NSCountcommand 巴2011年10月(2) NSApple script NsCreateCommand E Entity Framework(5) NSDeletecommand 2011年9月(1) HNSPositionalspecifier NSEXistscommand D HTML(1) NSGetcommand 2011年8月(2) NSScriptCoercion Handler NSMove Command J IOS(26) NSQuitCommand 2011年7月(1) NSScriptCommand NSSetcommand E Javascript(6) NsIndex specifier 2011年6月(1) NSScriptCommandDescription FNSMiddleSpecifier Objective-C(6) NSName Specifier 2011年5月(1) NSScript ExecutionContext NSProperty Specifier Other Technology (2) NSRandam Specifier 2011年4月(4) NSScriptObjectSpecifier NSRange Specifier 三PHP(3) NSRelative Specifier 2011年3月(4) NSScriptSuiteRegistry NSUniquelDSpecifier a Silverlight(6) NSWhose specifier 2011年1月(2) NSScriptwhose Test NSLogicalTest LNSSpecifierTest a Source Control(1) 2010年12月(6) Distributed Object d SQL Server(5) 日2010年11月(3) NSConnection NSDistantobjectRequesl a Windows Phone(1) NSProXy NSDistantobject NSE Protocolchecker D WPF(1) E XNA(4) 通常我们会将他们分为几类 推荐排行榜 1.值对象 集合 阅读排行榜 3.操作系统服务:文件系统、URL、进程通讯 通知 5.归档和序列化 6.表达式和条件判断 7. Objective-C语言服务 UIKi主要用于界面构架,这里我们不妨也看一下它的类结构 ACCeleration UIA:celeremeter UIBarBultcnllen t BAltan IITabBarlem UIBeze path VOor DEVice UIDo umenllrleracia"Ccn role FOrt UIL ngPrese GestureRecogri LIndow IDAbel Pinch Gestur rEcognizer UIPickervi ULo.a izedlndexedCclation)FURatarionGesture REcogn zer h UIPrgressview ILocalNolificatior UISwiceGsture Recognize) HUActvitylndicatcrVlev UMnC0t图er U Tar gesture reccgnize UI magee NSObject LIManu tam UINav gatonltem toolbar VINia UI Navigator Bar JIPesletoard LI Tablevew Cell UIPpoverCcntrollar)r U Sim tfFormaterF LACtin Shee: UIPint-ormatter UIMarkup TextP foRmatter UIAler View U Table view UPIitito UlViEWFintforatet F UIScrolVey UIText'view U nter acion Controller ISeach ear UIPrintPacerenderer JlApp cation UIWebview UIPintPaper UIM UControl IBUtton liregnorder UI Contrller Scree UnTabBar contrdler UFageCanto ScreenMode ITablevieycantrcller UISecmente Ccntrol USeach Dsplay driller UINawjabar controller UITexField Urextchecker Mace ike control t Iside Uext npu S ing tokenizer Mdeoed b contral UISw tch UTExpositicn UI extRance ITouch 常用结构体 在 Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结 构体完全采用 Objective-C定义,和我们自己定义的结构体没有任何区别,之 所以由框架为我们提供完全是为了简化我们的开发。常用的结构体有 ESRange、 NSPoint、 ASSize、 NSRect等 / main m Foundation Framework // Created by Kenshin Cui on 14-2-16 / Copyright(c)2014F Kenshin Cui. All rights reserved / #import <Foundation/Foundation.h> /* ESRange表小一个范围*/ void test10 NSRange rg={3,5};//第一参数是起始位置第二个参数是长度 //NSRange rg: //rg location=3 //NSRange rg=flocation=3,length=5] //常用下面的方式定义 NSRange rg2= NSMakeRange(3,5);//使用 NSMake Range定义一个 ESRange 印 ESRange可以使用 Foundation中方法 SLOg(@"rg2is‰", NSstringFromRange(rg2));//注意不能直接 SLOg(@"rg2is‰", rg2),因为rg2不是对象(准确的说‰是指针)而是结构体 /* NSPoint表示一个点 roid testof NSPoint p= NSMakepoint(10,15);// NSPoint其实就是 CGPoint //这种方式比较常见 NSPoint p2= CGPointMake(10,15) NSLog(NSStringFromPoint(p2)); /*NSS主ze表示大小*/ void test3(t ASSize s= NSMakesize(1,15);// ASSize其实就是 CGSize //这种方式比较常见 CGSize s2= GSizeMake(18,15) NSLog (NSString FromSize (s2)); /* NSRect.表示一个矩形*/ void testo NSRect r= NSMakeRect(18,5,188,299):// NSRect其实就是 CREct //这种方式比较常见 NSRect r2= CGRectMake(1,5,189,208) NSLog(NSStringFromRect (r2)); int main(int argc, const char argv[]i @autoreleasepool t test1(; test2(; I return 0 可以看到对于常用结构体在 Foundation框架中都有一个对应的make方法进行 创建,这也是我们日后比较常用的操作;而且与之对应的还都有一个 NSString FromXX方法来进行字符串转换,方便我们调试。上面也提到 ASSize其实就是 CGSize, NSRect其实就是 CREct,我们可以通过查看代码进 行确认,例如 ASSize定义 typedef CGSize Assize 继续查看 CGSize的代码 /*S⊥zes。* struct CGSize i CGFLoat width CGFLoat height; typedef struct CGSize CGSize; 日期 接下来熟悉一下 Foundation框架中日期的操作 / main m // Foundation Framework Created by Kenshin Cui on 14-2-16 Copyright (c)2014F Kenshin Cui. All rights reserved / #import <Foundation/Foundation.h> int main(int argc, const char argv[])[ Date*date1=[ NSDate date];//获得当前日期 SLOg(@"‰",date1);//结果:2814-87-1687:25:28+0898 NSDate *date2=[NSDate dateWithTimeintervalsinceNow:180];//在当前日期的基砷上加上18 秒,注意在0bjc中多数时间单位都是秒 SLOg(@"‰",date2);//结果;2014-87-1687:27:88+099 NSDate*date3=[ NSDate distantfuture];//随机获取一个将来的 日期 SLOg(@"‰",date3);//结果:4881-1-019:0:8+088 NSTimeInterval time=[date2 timeintervalsinceDate:date1];//H期之差,返回单位为秒 SLOg(@"%f",time);/结果:188.e8833 NSDate*date5-[date1ear1 aerAte:date3];//返回比较早的日 期 SLOg(@"‰",date5);//结果:2014-87-1687:25:28+099 //日期格式化 NSDateFormatter * formaterl=[[NSDateFormatter allocinit] formate 1. dateFormat=@"yy-MM-dd HH: mm: SS NSString *datestrl=[formater1 string FromDate: datel]: SLOg(@"‰", datestr1);//结果:14-97-1615:25:28 //字符转化为日期 NSDate *date6=[formater1 dateFromString: @"14-02-14 11:97:16”] SLOg(@"‰",date6);//结果:2014-92-1493:7:16+0998 return g 字符串 不可变字符串 在Objc中字符串操作要比在C语言中简单的多,在下面的例子中你将看到字符 串的初始化、大小写转化、后缀前缀判断、字符串比较、字符串截取、字符 串转换等,通过下面的例子我们基本可以掌握常用的字符串操作(注意这些内 容虽然基本,但却是十分常用的操作,需耍牢记) / main m / Foundation Framework / Created by Kenshin Cui on 14-2-16 / Copyright (c) 2014F Kenshin Cui. All rights reserved #import <Foundation/Foundation. h> /**字符串操作*/ void test1o char*str1=" c string"j//这是C语言创建的字符串 NSString*str2=@" oc string";/ObjC字符串需要加@,并且这种 方式创建的对象不需要自已释放内存 //下面的创建方法都应该释放内存 NSString *str3=[[NSString alloc] init] str3=@oc string"; NSString *str4=[[NSString alloc] initwithString: @"objective-C string"] NSString *str5=[[NSString alloc] initwithFormat: @"age is %i, name is %.2f"319,1.72f] NSString *str=[[NSString alloc] initwithUTF8String: " C string"];//C语言的字符串转换为ObjC字符串 /以上方法都有对应静态方法(一般以 string开头),不需要管理内 存(系统静态方法一般都是自动释放) NOStril 7=[NSString st ithString: @ Objective-C id test2(t NSLog(@"\"Hello world! \"to upper is %@",[@Hello world!"uppercasestring): //结果:"He1 1o world!" to upper is HELLO WORLD! NSLog (@"\"Hello world! \" to lowwer is %@",[@"Hello world!"lowercasestringl); //结果:"He1 1o won1d!"to1 owwer is he1 lo world! //首字母大写,其他字母小写 NSLog(@"\"Hello world!\" to capitalize is %@",l@"Hello world!"capitalizedstring]); //Hig:"Hello world!" to capitalize is Hello World! BOOL result= [@"abc" isEqualToString: @"aBc"]; NSLog(@%",result) //结果:日 NSComparisonResult ompare: @"aBc"]; // 如果是[@"abc" caseInsensitiveCompare:@"aBc"]则忽略大小写比较 if(result2==NSOrderedAscending)t NSLog(@" left else if(result2==NSOrderedDescending) Log(@"1 felse if(result2==NSOrderedSame)i g(@ left=right //结果:1eft》 right void testof NSLog(@ has prefix ab? %1",la abcdef hasPrefix: @"ab 1) //结果: has prefix ab?1 NSLog(@ has suffix ab? %1",[@"abcd hasSuffix: @"ef //结果: has suffix ab?1 NSRange range[@"abcdefabcdef rangeOfString: @"cde"];// 注意如果過到cde则不再往后面搜索,如果从后面搜索或其他搜索方式可以 设置第二个 options参数 Nelsen //结果: range 1s{2,3} //字符串分割 SLOg(@"‰@",[@" abcdef" substringFromIndex:3]);//从第三个 索引开始(包括第三个索引对应的字符)截取到最后一位 //结果:def SLOg(@"‰",[@" abcdef" substringToIndex:3]);///从开始 截取到第三个索引(不包括第三个索引对应的字符 NSLog(@%@,@"abcde substringwithRange: NSMakeRange(2, 3)]); //结果;cde tring *str1=@ 12abcd. 3a" rray *array=[strl componentsSeparatedBy string:@"."];/字符串分割 SLOg(@"‰@", array1) /*结果 12 //其他操作 void testof SLOg(回"‰i",[@"12" intvalue]);//类型转换 //结果:12 SLOg(回"‰zi",[@"he1 Lo wor ld,世界你好!"1 ength]);//字符串 长度注意不是字节数 //结果:17 SLOg(@"%c",[@"abc" characteratindex:8]);//取出制定位置 的字符 //结果 const char*s=[@"abc"UTF8 String];/转换为C语言字符串 NSLog(@%s",S); //结果:abc int main(int argc, const char argv[])i testy; test20 tests test5( return 0; 注意:上面代码注释中提到的需要释放內存指的是在MRC下的情况,当然本 质上在ARC下也需要释放,只是这部分代码编译器会自动创建。 扩展--文件操作 在ObjC中路径、文件读写等操作是利用字符串来完成的,这里通过几个简单 的例子来演示(首先在桌面上新建一个 test txt文件,里面存储的内容是” hello world,世界你好!”) // main. m / Foundation Framework / // Created by Kenshin Cui on 14-2-16 / Copyright(c)2014F Kenshin Cui. All rights reserved import < Foundation/Foundation.h> oid testiog //读取文件内容 NSString *path=@"/Users/kenshincui/Desktop/test. txt NSString *str1=[NSString stringwithContentsofFile: path encoding: NSUTF8StringEncoding error: nil //注意上面也可以使用gb2312gbk等,例如 kCFStringEncodingGB_188302090,但是需要用 CFStringConvert Encoding ToNSStringEncoding#*i Log (a str1 is %@",str1); //结果:str1ishe1 lo wor1d,世界你好! //上面我们看到了读取文件,但并没有处理错误,当然在ObjC中可以 @try@ catch@ finna1y但通常我们并不那么做 //由于我们的test.txt中有中文,所以使用下面的编码读取会报错 下面的代码演示了错误获取的过程 NSError errori NSString *str2=[NSString stringwithContentsOfFile: path encoding: kCFStringEncodingGB_ 18030_2000 error: &error]i //E 意这句话中的 error变量是** error,就是指针的指针那就是指针的地址 由 Jerror就是一个指针此处也就是eror的地址& error,具体原因见下 面补充 if(error )f NSLog(@"read error the error is %@",error); relief NSLog(@"read success, the file content is %@",str2); //结果: read error, the error is error Domain=NSCocoaErrorDomain Code=261The file couldn't be opened using the specified text encoding Userinfo=0x100109620 [NSFilePath=/Users/kenshincui/Desktop/test. txt NSStringEncoding=15861 //读取文件内容还有一种方式就是利用UR1,它除了可以读取本地文 件还可以读取网络文件 //NSURL *url=[NSURL URLWithString: @"file: ///Users/kenshincui/Desktop/test. txt"] NSURL *url=[NSURL UrlwIthsTriNg:@http://www.apple.com NSString *str3=[NSString stringwithContentsOfURL: url encoding: NSUTF8StringEncoding error: ni str3 void test2(0 //下面是文件写入 NSString *path1@/Users/kenshincui/Desktop/test2. txt j NOErr。r* error1 NSString*str11=@"he1 Lo wor1d,世界你好!"; [strll writeToFile: path atomically: YES encoding: NSUTF8StringEncoding error: &error1];//atomically 代表一次性写入,如果写到中间出错了最后就全部不写入 if(error)t NSLog(@write fail, the error is %@",[error 1oca1 izedDescription])://调用1oca1 izedDescription是只打印关键 错误信息 NSLog(@"write success!") //结果: write success! //路径操作 void test3(t NSMutableArray* marray=[ NSMutableArray array];//可变数组 [marray addobject: @"Users"]; [marray addobject: @"KenshinCui"]; [marray addobject: @"Desktop"I3 NSString *path=[NSString pathwithComponents: marray] SLOg(@"‰@",path);/字符串拼接成路径 //结果: Users/ Kenshincui/ Desktop SLOg(@"‰@",[ path pathComponents]);//路径分割成数组 /*结果 Users, KenshinCui, Desktop SLOg(@"‰i",[ path isAbsolutePath]);//是否绝对路径(其实就 是看字符串是否以“/开头) //结果 SLOg(@"‰",[path1 astPathComponent]);//取得最后一个目录 //结果: Desktop og(@"9@",[path stringByDeletingLastPathComponent]);//删除最后一个目录,注意 path本身是常量不会被修收,只是返回一个新字符串 //结果: Users/ Kenshincui SLOg(@"‰@",[path stringByAppendingPathComponent:@" Documents"]);/路径拼接 //结果: Users/ Kenshincui/ Desktop/ Documents //扩展名操作 void testa)f NSString *path=@"Users/KenshinCui/Desktop/test. txt Log(@"‰@",[ path pathExtension]);/取得扩展名、注意0bjc 中扩展名不包括”." //结果 g(@g@",[path stringByDeletingPathExtension]);//#H 除扩展名、注意包含". //结果; Users/ Kenshincui/ Desktop/test NSLog(@"%@,[@"Users/KenshinCui/Desktop/test stringByAppendingPathEXtension:@"mp3"]);//添加扩展名 //结果: Users/ Kenshincui/ Desktop/test.mp3 int main(int argc, const char argyi])[ test2( test3 test4( return a 注意在上面的例子中我们用到了可变数组,下面会专门介绍。 可变字符串 我们知道在字符串操作过程中我们经常希望改变原来的字符串,当然这在C语 言中实现比较复杂,但是ObjC为我们提供了新的可变字符串类 NSMutableString,它是 NSString的子类。 mainm / Foundation Framework // Created by Kenshin Cui on 14-2-16 / Copyright (c)2014F Kenshin Cui. All rights reserved / import Foundation/ Foundation. h> int main(int argc, const char argv[])i /*可变字符串,注意 NSMutablestring是 NSString子类*/ //注意虽然 initwithcapacity分配字符串大小,但是不是绝对的不 叮以超过此范围,声明此变量对性能有好处 NSMutableString *strl= [[NSMutablestring alloc initWithCapacity: 10 str1 setstring:@"hel1o"];//设置字符串 SLOg(@"‰",str1); //结果: hello str1 appendstring:@",wor1d!"];//迫加字符串 g(@"‰@",str1); //结果: hello,wor1d! [str1 append Format:@"我的年龄是‰i。dear,I1ove (@"@",str1) //结果: hello, world!我的年龄是18。dear,I1 ove you //替换字符串 NSRange range=[str1 rangeofString: @"dear"l; withstring: @"Honey"]; //结果: hello,wor1d!我的年龄是18。 Honey, I love you //插入字符串 [str1 insertstring: @"My name is Kenshin. atIndex: 12] SLOg(@"‰@",str1); //结果:he1lo,wor1d! My name is Kenshin.我的年龄是18 Honey, I love you //删除指定字符串 [str1 deleteCharactersInRange: [str1 rangeOfString: @"My name is kenshin."]];//删除指定范围的字符串 SLOg(@"‰",str1); //结果: hello,wor1d!我的年龄是18。 Honey, I love you return g 数组 不可变数组 下面将演示常用的数组操作:初始化、数组对象的方法执行、数组元素的遍 历、在原有数组基础上产生新数组、数组排序等 main m / Foundation Framework // Created by Kenshin Cui on 14-2-16 / Copyright (c)2014F Kenshin Cui. All rights reserved #import <Foundation/Foundation.h> #import"Person.h" void test1(i // NSArray长度不可变所以初始化的时候就威值,并且最后以ni1结 尾 //此外需要注意 NSArray不能存放C语言的基础类型 NSobject *obj=L[NSobject alloc]init

...展开详情
所需积分/C币:12 上传时间:2015-07-24 资源大小:1.56MB
举报 举报 收藏 收藏 (3)
分享 分享

评论 下载该资源后可以进行评论 1

u013684800 挺好的,可以学习!
2015-08-14
回复
有用就好