下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
jecve- 培訓(xùn)第二章數(shù)據(jù)類型第三章字符串第六章存取器第七章繼態(tài)id類型第九章分類和協(xié)議第十章屬性列表第十一章對(duì)象第十二章歸檔第一章程序整體語(yǔ)法結(jié)程序的頭文件和源文件的擴(kuò)展名分別為.h和.mC一樣。Object_C中的nil相當(dāng)于NULLObject_C中的YESNO相當(dāng)于truefalse。這里再講解一下YESNO:Object-c提供了BOOLBOOL類型和C++C++0為true0falseObject-c1true并被宏定義為YES,0false并被宏定義為NO。BOOLareIntsDifferent_faulty(intthing1,int{return(thing1-}{}因?yàn)閍reIntsDifferent_faulty方法返回的是兩個(gè)整數(shù)的差,如果這個(gè)差不為1,那么不會(huì)為YES。#import<Foundation/Foundation.h>intmain(intargc,constchar*{NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];NSLog(@"Programmingisfun!");return0;}#import相當(dāng)于#include<…>和。導(dǎo)入該頭文件是因?yàn)樵诔绦蚪Y(jié)尾處用NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init若對(duì)象要加入該池,只要發(fā)送一條autorelease消息。NSLog(@"Programmingis將顯示常量字符串,類似于printf函數(shù),并且它會(huì)自動(dòng)在文?后面添加'\n'。當(dāng)然其中也可以使用轉(zhuǎn)義NSLog(@"Thesumof50and25is[pooldrain];//釋放內(nèi)存池 獲得對(duì)象:(Car類獲得其對(duì)象)youCar=[Carnew];@interface@interface NewClassName:{}每次創(chuàng)建新對(duì)象時(shí),將同時(shí)創(chuàng)建一組新的實(shí)例變量且唯一。注意:在對(duì)象類型的右邊都有一個(gè)*號(hào),所有的對(duì)象變量都是指針類型。Id類型已經(jīng)被預(yù)定義為指針類型,所以不需要加一個(gè)*號(hào)。任何類型的對(duì)象。-/+(returntype)function_name:(parametertype)parameter1otherParameter:(parameter_type)如果只有一個(gè)參數(shù),在:后面參數(shù)的類型和名稱;如果有多個(gè)參數(shù)的話,每個(gè)參數(shù)前面都要有一個(gè):,然后接著是參數(shù)類型和參數(shù)名稱??墒谴蠹铱赡苓€是覺(jué)得很奇怪。比如上面這個(gè)例子中,otherParameterobjectivec中,對(duì)于有多個(gè)參數(shù)的函數(shù),可以理解為將函數(shù)的名稱拆如在C++voidinitializeRectangle(intx1,inty1,intx2,int但并不知道這些參數(shù)都是什么意思;但在objectivec中,可以這樣voidinitializeRectange:(int)x1LeftUpY:(int)y1RightBottomX:@implementation //NewClassName表示的名稱與@interface#import<Foundation/Foundation.h> Fraction:{intnumerator;}(void)setNumberator:(int)(void)setDenominator:(int)d;//Fraction.m@implementation{}(void)setNumberator:(int){numerator=}(void)setDenominator:(int){denominator=} *myFraction=[[Fraction init]個(gè)新實(shí)例,然后向新創(chuàng)建的實(shí)例對(duì)象發(fā)送init消息來(lái)初始化該對(duì)象。Fraction*myFraction= setNumerator用完釋放Fraction對(duì)象的方法 平臺(tái)不支持回收機(jī)制 Rectangle:{ width heigth} intwidth(int)area(int)perimeter andHeigth:(int)h//Rectangle.m文件#import"Rectangle.h"@implementationRectangle width,heigth andHeigth:({ w h}{ width*heigth}{ (width+heigth)*2}下面是Rectangle的子類#import Square:(void)setSide:(int)s(int)side@end#import@implementationSquare(void)setSide:({[selfsetWidth: andHeight:}{ width}@endself關(guān)鍵字用來(lái)指明對(duì)象是當(dāng)前方法的接收者。(void)setSide:{[selfsetWidth: andHeight:}:#define語(yǔ)句和c#運(yùn)算符: str(x)表示在調(diào)用該宏時(shí),預(yù)處理程序根據(jù)宏參數(shù)創(chuàng)建C風(fēng)格的常量字符串。#import語(yǔ)句相當(dāng)于#include#import#條件編譯語(yǔ)句(#ifdef、#endif#else#ifndef)和C#undef其他基?的C語(yǔ)言特性:CompoundLiteral是包含在括號(hào)之內(nèi)的類型名稱,之后是一個(gè)初始化列表。 如果intPtr為int*類型:intPtr=(int[100]){[0]=1,[50]=50,[99]=其他如循環(huán)語(yǔ)句(dowhile、while、for)、條件語(yǔ)句(if語(yǔ)句(if-else、復(fù)合判斷條件等、switch語(yǔ)句)、Boolean(YESNO)、條件運(yùn)算符、goto語(yǔ)句、空語(yǔ)句、逗號(hào)表達(dá)式、sizeof運(yùn)算符、命令行參數(shù)、位操作都和C一樣。第二章數(shù)據(jù)類Object-c提供基?數(shù)據(jù)類型:int、float、double、 整型第一位為0,NSLog的格式符為: %#o十六進(jìn)制以0x開(kāi)頭的整型,NSLog的格式符為: 若(%X或%#X)NSLogNSLog的格式符 NSLog的格式符 指數(shù)的值小于-4大于5,采用%e,否則采用0x0X,后面緊跟一個(gè)或多個(gè)十進(jìn)制或十六進(jìn)制數(shù)字,再后是pP,最后是可以帶符號(hào)的二進(jìn)制指數(shù)。例:0x0.3p10表示的值為3/16*210注:若無(wú)特殊說(shuō)明,Object-c將所有的浮點(diǎn)常量看做double值,要顯示double值可使用和floatNSLoglongdouble常量寫成尾部帶有字母l或者L的浮點(diǎn)常量。NSLog longlonglongshortunsignedshortunsignedunsignedlongunsignedlonglong 處理Boolean(0 intnumber; 在類中定義靜態(tài)變量和Cvoaltile說(shuō)明符和const正好相反,明確告訴編譯器,指定類型變量的值會(huì)改變。(I/O端口)比如要將輸出端口的地址在outPort的變量中。volatilechar*outPort=*outPort=枚舉數(shù)據(jù)類型、typedef語(yǔ)法以及數(shù)據(jù)類型的轉(zhuǎn)換和C第三章字符串 1、NSRangerange;range.length=2、NSRangerange17Cocoa提供創(chuàng)建這些數(shù)據(jù)類型方法:NSMakePoint(、NSMakeSize()表示字符串的類NSString*heigth stringWithFormat:@"Youheigthis%dfeet,%dinches",unsignedintlength= 返回Bool-(BOOLisEqualToString(NSString*)aString;//比較兩個(gè)字符串的內(nèi)容是否相等還可以使用compare:方法 parisonResult)compare:(NSString*)string;//逐個(gè)字符比較 parisonResult)compare:(NSString*)stringoptions:(unsigned)mask; parisonResult是一個(gè)枚舉值options是一個(gè)位掩碼,即:NSCaseInsensitiveSearch:不區(qū)分大小寫NSLiteralSearch: 進(jìn)行完全比較, 如果你想知道字符串內(nèi)的某處是否包含其他字符串,使用rangeOfString:-(NSRange)rangeOfString:(NSStringNSString是不可變的,NSMutableString是可變的。用方法stringWithCapacityNSMutableString*string=[NSMutableStringstringWithCapacity可以使用appendString:或appendFormat:(void)appendString:(NSString(void)appendFormat:(NSString*)format,...可以使用deleteCharactersInRange:(void)deleteCharactersInRange:集合限制:只能Objective—C的對(duì)象,不能C語(yǔ)言的基?數(shù)據(jù)類型(int、float、enum、struct、或者中的隨機(jī)指針。同時(shí)也不能nil(對(duì)象的零值或NULL值NSArray*array arrayWithObjects:@"one",@"two", int)index使用componentsSeparatedByString:來(lái)切分NSArray,NSString*string=@"oop:ack:bork:greeble:ponies";NSArray*chunks= componentsSeparatedByString:使用componentsJoinedByString:來(lái)合并NSArraystring= componentsJoinedByString:@":-)"]可變數(shù)組NSMutableArray通過(guò)類方法arrayWithCapacity:來(lái)創(chuàng)建可變數(shù)組+(id)arrayWithCapacity:(unsigned)numItemsNSMutableArray*array= arrayWithCapacity:使用addObjectNSEnumerator要想使用NSEnumerator,需要通過(guò)objectEnumerator(NSEnumerator*)objectEnumerator;NSEnumerator*enumerator;enumeratorarrayobjectEnumerator注:若想從后向前枚舉集合,使用方法rvrsojtnurtor;獲得枚舉器以后,開(kāi)始wile循環(huán),每次循環(huán)都向這個(gè)枚舉器請(qǐng)求它的nxtObjt(id)nextObject;//nil表明循環(huán)結(jié)束for(NSString }{[book}//創(chuàng)建一個(gè)SEL類型的selector,sortUsingSelector:使用該方法比較數(shù)組中的兩個(gè)元素, 回值為:若小于返回NSOrderedAscending;相等返回NSOrderedSame;大于返回NSOrderedDescending- {return[namecompare:[element}NSDictionary(關(guān)鍵字和定義的組合NSDictionary通常在給定一個(gè)關(guān)鍵字(通常是一個(gè)NSString字符串)下一個(gè)數(shù)值(可以是任何使用dictionaryWithObjectsAndKeys:來(lái)創(chuàng)建字典Tire*t1= NSDictionary*tires=[ dictionaryWithObjectsAndKeys:t1,@"front-使用方法objectForKeyTire*tire=[tiresobjectForkey:@"front-創(chuàng)建新的NSMutableDictionary對(duì)象,向類NSMutableDictionary發(fā)送dictionarydictionaryWithCapacity +(id)dictionaryWithCapacity(unsignedint)numItems;setObject:forKey:方法給字典添加元素setObject:forKey:(id)aKey下面是另一種使用發(fā)送dictionaryNSMutableDictionarytires= dictionary] setObject forKey:@"front-..可以使用removeObjectForKey (void)removeObjectForKey:(id)aKey注:不要去創(chuàng)建NSString、NSArray或NSDictionary的子類,實(shí)在要的話可以用復(fù)合的方式來(lái)解決問(wèn)題。使用這種方法枚舉詞典:for(NSString*keyin{..}#import常用的NSSet---確定集合是否包含--(NSEnumerator-nsset-在對(duì)象nsset-----從集合中刪除對(duì)象----注:NSInteger?數(shù)據(jù)類型的typedef,被typedef64long32intNSNumber類來(lái)包裝基?+(NSNumber*)numberWithChar:(char)value+(NSNumber*)numberWithInt:(int)value+(NSNumber*)numberWithFloat:(float)value+(NSNumber*)numberWithBool:(BOOL)value;還有包括無(wú)符號(hào)版?和各種long型數(shù)據(jù)及l(fā)onglong整型數(shù)據(jù) numberWithInt 42]將一個(gè)基?類型封裝到NSNumber NSNumber實(shí)際上是NSValue的子類,NSValueNSValue將結(jié)構(gòu)放入NSArray和NSDictionary中。創(chuàng)建新的+(NSValue*)valueWithBytes:(constvoid *)valueobjCType:(constchar NSValue*value;value=[NSValuevalueWithBytes: 使用getValue:來(lái)提取數(shù)值(傳遞的是要這個(gè)數(shù)值的變量的地址)(先找地址再取值)value=[array objectAtIndex:0];[ getValue:&rect]注:Cocoa提供了將常用的struct型數(shù)據(jù)轉(zhuǎn)化成NSValue+(NSValue*)valueWithPoint:(NSPoint)point+(NSValue*)valueWithSize:(+(NSValue*)valueWithRect:( null]//總返回一樣的值(NSNull*)null; setObject:[NSNullnull]forKey: home=[contast objectForKey:@"home"]; (home==[NSNullnull]){..}}NSFileManager允許對(duì)文件系統(tǒng)進(jìn)行操作(創(chuàng) //NSFileManagerNSFileManager*manager= defaultManager]NSString*home=[@"~"stringByExpandingTildeInPath] #import<Foundation/Foundation.h>intmain(intargc,constchar*argv[])NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]NSFileManagermanager=[NSFileManagerNSStringhome=[@"~"NSDirectoryEnumeratordirenum=[managerenumeratorAtPath:NSMutableArrayfiles=[NSMutableArrayarrayWithCapacity:NSStringwhile(filename=[direnumnextObject])if([[filename {[filesaddObject:}}NSEnumeratorfileenum=[fileswhile(filename=[fileenumnextObject])NSLog(@"%@",return0;}第四章存NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];[pooldrain];象的。通過(guò)向目前的自動(dòng)釋放池發(fā)送一條autorelease消息,可以將一個(gè)對(duì)象添加到其中。概念:創(chuàng)建對(duì)象時(shí),將它的次數(shù)設(shè)置為1,每一次必須保持該對(duì)象時(shí),就發(fā)送一條retain消息,使其次數(shù)加1。[myFraction[myFractionrelease];當(dāng)計(jì)數(shù)為0的時(shí)候,系統(tǒng)就會(huì)釋放它的內(nèi)存,通過(guò)向?qū)ο蟀l(fā)送dealloc消息。通過(guò)向?qū)ο蟀l(fā)送retainCount消息可以獲得這個(gè)對(duì)象的計(jì)數(shù),返回的是NSUInteger整數(shù)。只要對(duì)象的計(jì)數(shù)不為0,系了,即對(duì)象將被銷毀(通過(guò)調(diào)用dealloc方法。intmain(intargc,constchar*{NSAutoreleasePoolpool=[[NSAutoreleasePoolalloc]tracker=[RetainTrackernew];//count:[trackerretain];//count:[trackerautorelease];//count:still2[trackerrelease];//count:1NSLog(@"releasingpool");[poolrelease];//getsnuked,sendsreleasetotrackerreturn(0);} 、ew或者通過(guò)copy消息(生成接受對(duì)象的一個(gè)副?)創(chuàng)建一個(gè)對(duì)象,對(duì)象的計(jì)數(shù)器被設(shè)置成1。發(fā)送retain消息將增加計(jì)數(shù)器,release消息減1。要獲得計(jì)數(shù)器的當(dāng)前值,可以發(fā)送retainCount消(id)retain(void)release(unsinged)retainCount(void)setEngine:(Engine*){ retain]; release];engine= }獲得對(duì)象時(shí)保留,在dealloc對(duì)象發(fā)送一條dealloc消息來(lái)釋放它所占的內(nèi)存。3、自動(dòng)釋放池在釋放池?身的時(shí)候自動(dòng)釋放池中的對(duì)象。系統(tǒng)向每個(gè)對(duì)象發(fā)送一條release息,對(duì)計(jì)數(shù)變?yōu)?的對(duì)象發(fā)送一條dealloc消息來(lái)釋放它所占的內(nèi)存。5、若使用alloccopy(或使用allocWithZonecopyWithZone:mutableCopy來(lái)直接創(chuàng)建對(duì)象,則由你負(fù)責(zé)釋放它。每次retainreleaseautoreleas#import@interfaceTire:{floatpressure;}(id)initWithPressure:(float)(id)initWithPressure:(float)treadDepth:(float) (void)setPressure:(float)(float)(void)setTreadDepth:(float)@end//Tire#import"Tire.h"(id){if(self=[selfinitWithPressure:treadDepth:20])}return}//(id)initWithPressure:(float){if(self=[selfinitWithPressure:treadDepth:20.0])}return}//{if(self=[selfinitWithPressure:treadDepth:td])}return}//(id)initWithPressure:(float)treadDepth:(float){if(self=[super{pressure=p;treadDepth=td;}return}//(void)setPressure:(float){pressure=}//(float){return}//(void)setTreadDepth:(float){treadDepth=}//(float){return}//(NSString*){NSStringdesc=[NSString@"Tire:Pressure:%.1fTreadDepth:%.1f",pressure,treadDepth];return@end//Tire通常的寫法:-{if(self= ..} (self)}有些類包含多個(gè)以init開(kāi)頭的方法:例如NSString類中的一些初始化方法:NSString*emptyString= init]NSString*string= initWithFormat:@"%dor%d",25,624]NSString*string= initWithContentOfFile:@"/tmp/words.txt"]init第六章存取#import<Cocoa/Cocoa.h>@classTire;@class@interfaceCar:{NSString*name;NSMutableArray*tires;Engine*engine;}@property(copy)NSString*name@property(retain)Engine*engine(void)setTire:(Tire*) atIndex:(int)(Tire*)tireAtIndex:(int)index(void)print; #import"Car.h" name; engine;(id){if(self=init]){name=@"Car"tires=[[NSMutableArray i;for(i=0;i<[tiresaddObject: null]]}}return(self)}{[namerelease];[tiresrelease];[superdealloc];(void)setTire:(Tire*)tireatIndex:(int){ replaceObjectAtIndex: withObject:tire](Tire*)tireAtIndex:(int){Tiretire=[tires objectAtIndex:index]; (tire);(void){NSLog(@"%@has:",[self tireAtIndex:i]); i;for(i=0;i<4;i tireAtIndex:i])}NSLog(@"%@",engine)Car*car=[[Car init];=@"Herbie"carengine=[[Slant6alloc]init];//Slant6Engine的子類@propertyfloatrainHandling表明類的對(duì)象具有float類型的屬性,其名稱:rainHandling,而且可以調(diào)用-setRainHandling:來(lái)設(shè)置屬性,調(diào)用-rainHandling來(lái)屬性。@property的作用是自動(dòng)屬性的setter和getter方法。@synthesize =方法,但在其實(shí)現(xiàn)中使用appel@property(readwrite,copy)NSString*name;//對(duì)象可讀寫,對(duì)象將被@property(readonly)NSString*name;////對(duì)象只讀點(diǎn)表達(dá)式(.)在等號(hào)左邊,該屬性名稱的setter方法將被調(diào)用。若在右邊,則可以調(diào)用屬性名稱的注意:在使用特性的時(shí)候經(jīng)常出現(xiàn),提示的對(duì)象不是struct類型,請(qǐng)檢查你是否包含了使用的類該技術(shù)同樣適用于int、char、BOOL、struct甚至可以定義一個(gè)NSRect補(bǔ)充1、/CjtiveC(ndlte或llofre),jtiv-C也有自loloihone長(zhǎng)度(字節(jié)1-128~-27~(27-4-2147483648~-231~(231-short2-32768~-215~(215-long4-2147483648~-231~(231-longlong8-263~(263-long198154unsignedshort20~(216-unsigned40~(232-unsignedlong40~(232-unsignedlonglong80~(264-1Objective-CSquare類繼承于Rectangle類@interfaceRectangle: {intwidth;int}@propertyintwidth, //-(int)//Rectangle類定義#import"Rectangle.h"@implementationRectangle@synthesizewidth,height;{returnwidth*}-(int){return(width+height)*}//Square類#import"Rectangle.h"@interfaceSquare //-(void)setSide:(int) //Square類定義#import"Square.h"@implementationSquare-(void)setSide:(int){[selfsetWidth:sandHeight:selfsetWidthandHeight:}-(int){return}Rectangle類只了矩形大小?,F(xiàn)在要添加原點(diǎn)(x,y)的概念。因此,定義一個(gè)名為XYPoint的類//XYPoint類#import<Foundation/Foundationh>@interfaceXYPoint:NSObject{intx;int}@propertyintx, -(void)setX:(int)xValandY:(int)yVal;//XYPoint類定義#import"XYPointh"@implementationXYPoint@synthesizex,y;-(void)setX:(int)xValandY:(int){x=xVal;y=}#import<Foundation/Foundationh>@class //代替#importXYPoint//使用@class指令提高效率,編譯器不需要處理整XYPointh文件,//只需要XYPoint是一個(gè)類名,但是如果需要XYPoint類中方//法,@class指令是不夠的,必須用#import@interfaceRectangle:{intwidth;intXYPoint}-(int)-(int)perimeter;第八章動(dòng)態(tài)綁定和id類#import"Fraction.h"#import" //printintmain(intargc,char{NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];Fraction*f=[[Fractionalloc]init]; *c=[[Complexalloc]id //dataValue為id類[fsetTo:2over:5];[csetReal:10.0andImaginary: //將Fractionf到dataValue[dataValue //將Complexc到dataValue[dataValue //問(wèn)題:兩次遇到[dataValueprint];Fraction和Complex類中都定義有print方法,系統(tǒng)如何知道//答案:在程序執(zhí)行期間,當(dāng)系統(tǒng)準(zhǔn)備將print消息發(fā)送給dataValue時(shí),它首先檢查dataValue中[frelease];[crelease];return0;}Fraction類,除了將兩個(gè)分?jǐn)?shù)相加的add:方法外,還想要擁有將兩個(gè)分?jǐn)?shù)相減、相乘和相除的方//Fraction類@interfaceFraction:NSObject{intnumerator;}@propertyintnumerator,-(void)setTo:(int)nover:(int)-(Fraction*)add:(Fraction*) //分?jǐn)?shù)的加法函現(xiàn)在,從接口部分刪除add:方法,并將其添加到新分類,同時(shí)添加其他三種要實(shí)現(xiàn)的數(shù)算。看一下新MathOps分類的接口部分。#import"Fraction.h"@interfaceFraction-(Fraction*addFraction* -(Fraction*mul:Fraction* -(Fraction*subFraction* -(Fraction*divFraction* //#inport"Fraction 可以在一個(gè)實(shí)現(xiàn)文件中定義Fraction.h接口部分中的所有方法,以及MathOps分類中的所有方法。的分類。與接口部分一樣,通過(guò)將分類名稱括在類名稱之后的圓括號(hào)中來(lái)確定方法所屬的分類,如下所示:@implementation //codeforcategory…C 協(xié)議,則必須實(shí)現(xiàn)名為myProtocolMethod的方法。通過(guò)在@interface行的一對(duì)尖括號(hào)<...>內(nèi)列出協(xié)議名稱,可以告知編譯器你正在采用一個(gè)協(xié)議。這項(xiàng)@interfaceAddressBook: AddressBook是父類為AddressBook的對(duì)象,并且它遵守myProtocolMethod協(xié)議。在AddressBook的實(shí)現(xiàn)部分,編譯望找到定義的myProtocolMethod方法。@interfaceAddressBook:NSObject<myProtocol,yourProtocol>AddressBookmyProtocolMethod和yourProtocolMethod協(xié)議。這次,編譯器將期望在AddressBook的實(shí)現(xiàn)部分看到為這些協(xié)議列出的所有方法的實(shí)現(xiàn)。B、協(xié)議不任何類,它是無(wú)類的(classless。任何類都可以遵守某項(xiàng)協(xié)議 這告知編譯器currentObject將包含遵守Drawing協(xié)議的對(duì)象。如果向currentObject指派靜態(tài)類型的對(duì)象,這個(gè)對(duì)象Drawing協(xié)議,編譯器將給出warning。idcurrentObjectid變量,不會(huì)產(chǎn)生這條消息,因?yàn)榫幾g器不知道存儲(chǔ)在id變量中的對(duì)象是否遵守Drawing協(xié)議。 <Drawing,Drawing1> Drawing3DDrawingDrawing3D協(xié)議的類都必須實(shí)現(xiàn)此協(xié)議列出的方法,以及Drawing協(xié)議的方法。 Fraction <NSCopying,此處,F(xiàn)raction擁有一個(gè)分類stuff,這個(gè)分類采用了NSCopyingNSCoding說(shuō)明:“Objective-C編程可以使用與C綁定的所有工具,例如標(biāo)準(zhǔn)C庫(kù)函數(shù)。可以使用和free()函數(shù)處理動(dòng)態(tài)內(nèi)存管理問(wèn)題,或者使用open(),read(),write(),fopen()和fread()函數(shù)處理文件?!睂傩粤斜眍惏∟SArray、NSDictionary、NSString、NSNumber、NSDate和NSData。NSDate是用于處理日期和時(shí)間的基礎(chǔ)類。可以使用[NSDatedate];獲取當(dāng)前的日期和時(shí)間,它是一個(gè)NSDate*date=[NSDatedata];NSLog(todis@”date); 還可以獲取與當(dāng)前時(shí)間相隔一定時(shí)差的日期。例如,24小時(shí)之間的確切日期NSDate*yesterday=[NSDatedateWithTimeIntervalSinceNow:-(24*60*60)];NSLog(trdais@”yesterday); +dateWithTimeIntervalSinceNow:接受一個(gè)NSTimeInterval參數(shù),該參數(shù)是一個(gè)雙精度值,表示以秒為NSData類包裝了大量字節(jié)。我們可以獲得數(shù)據(jù)的長(zhǎng)度和指向字節(jié)起始位置的指針。下面的NSData對(duì)象將保存一個(gè)普通的C字符串(一個(gè)字節(jié)序列constchar*string=“there,thisisaCtngNSData*data=[NSDatadataWithBytes:stringlength:strlen(string)+1];NSogdaais @”data);datais 0x48H,0x69i,等等。strlen(string)+1中的“+1C字符串所需的尾部的零字節(jié)(輸出結(jié)果尾的00)。NSLog@”%bytesstringis‘s”,[datalength],[data//-length方法給出字節(jié)數(shù)-bytes方法給出指向字符串起始位置的指針30bytesstringisHthere,thisisaCstring!NSData對(duì)象是不可改變的,它們被創(chuàng)建后就不能改變。NSMutableData支持在數(shù)據(jù)內(nèi)容中添加和刪除集合屬性列表類(NSArray、NSDictionary)具有一個(gè)-writeToFileatomically:方法,用于將屬性列表寫入文件。NSString和NSData也具有writeToFileatomicallyNSArrayphrase=[NSArrayarrayWithObjects:@I””m”@t”@b”@”@vb”nil]; p/gxt <?xmlron10”nodingU8<!DOCTYPEplistPUBLIC“-//Apple//DTDPLIST10//E <pliston<string>I<string<string>seem<string<string>to<string<string>be<string<string>a<string<string>verb<string現(xiàn)在已經(jīng)將verbiage.txt文件保存在了磁盤上,可以使用+arrayWithContentsOfFile:方法該文件。NSArray*phrase2=[NSArray arrayWithContentsOfFile:@”/t/rbigetxtNSLog%@”phrase2);()writeToFile:方法中的atomically:參數(shù)的值為BOOL類型,用于通知是否應(yīng)該首先將文件保存在臨時(shí)第十一章對(duì)//XYPoint類@interfaceXYPoint:NSObject{int}@propertyintx, //XYPoint類定義#import"XYPoint.h"@implementationXYPoint@synthesizex,y;{x=xVal;y=}//Rectangle類@class@interfaceRectangle:{intwidth;intXYPoint}@propertyintwidth, //-(XYPoint*)-(void)setOrigin:(XYPoint*)-(void)setWidth:(int)wandHeight:(int)-(int)//Rectangle類定義#import"Rectangle.h"@implementationRectangle@synthesizewidth,height;-(void)setWidth:(int)wandHeight:(int){width=w;height=}-(void)setOrigin:(XYPoint*){origin=}{returnwidth*}-(int){return(width+height)*}-(XYPoint*){return}#import"XYPoint.h"intmain(intargc,char{NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];Rectangle*myRect=[[Rectanglealloc]init];[myRectsetWidth:5andHeight:8];XYPoint*myPoint=[[XYPointalloc]init];[myPointsetX:100andY:200];myRect.origin=myPoint; NSLog@"Originati%imyRect.origin.xmyRect.origin.y);[myPointsetX:50andY:50];NSLog(@"Originat(%i,%i)",myRect.origin.x,myRect.origin.y);[myRectrelease];[pooldrain];return0;} 這樣賦值的結(jié)果僅僅是將對(duì)象myPoint的地址到myRect.origin中。在賦值操作結(jié)束時(shí),兩個(gè)變量是NSMutableArray對(duì)象,那么語(yǔ)句 #import<Foundation/NSObject.h>#import<Foundation/NSArrayh>#import<Foundation/NSString#import<Foundation/NSAutoreleasePoolh>intmain(intargc,char*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];NSMutableArray*dataArray=[NSMutableArrayarrayWithObjects:@"one",@"two",@"three",@"four",nil];NSMutableArray*dataArray2;dataArray2=[dataArray2removeObjectAtIndex:0];NSLog(@"dataArray:");for(NSString*elemindataArray)NSLog(@"%@",elem);NSLog(@"dataArray2:for(NSString*elemindataArray2)NSLog(@"%@",elem); //下面開(kāi)始dataArray2=[dataArraymutableCopy];[dataArray2removeObjectAtIndex:0];NSLog(@"dataArray:");for(NSString*elemindataArray)NSLog(@"%@",elem);NSLog(@"dataArray2:for(NSString*elemindataArray2)NSLog(@"%@",elem); [dataArray2release];[pooldrain];return}copy利用名為copy和mutableCopy的方法,可以創(chuàng)建對(duì)象的副?NSMutableArray對(duì)象dataArray和dataArray2,語(yǔ)句dataArray2=[dataArrayremoveObjectAtIndex:0];刪除了dataArray2中的第一個(gè)元素,但是不會(huì)刪除dataArray中的。B、在產(chǎn)生數(shù)組的副?時(shí),數(shù)組中每個(gè)元素的保持計(jì)數(shù)將通過(guò)操作自動(dòng)增1。所以,需要[dataArray2release];釋放它的內(nèi)存。淺和#import<Foundation/NSObject.h>#import<Foundation/NSArrayh>#import<Foundation/NSString#import<Foundation/NSAutoreleasePoolh>intmain(intargc,char*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];NSMutableArray*dataArray=[NSMutableArrayarrayWithObjects:[NSMutableStringstringWithstring:@"one"],[NSMutableStringstringWithstring:@"two"],[NSMutableStringstringWithstring:@"three"],NSMutableArray*dataArray2;NSMutableString*mStr;NSLog(@"dataArray:");for(NSString*elemindataArray)NSLog(@"%@",elem); dataArray2=[dataArraymStr=[dataArrayobjectAtIndex: [mStrappendString:@"ONE"]; NSLog(@"dataArray:");for(NSString*elemindataArray)NSLog(@"%@",elem);NSLog(@"dataArray2:for(NSString*elemindataArray2)NSLog(@"%@",elem); [dataArray2release];[pooldrain];return}dataArray的第一元素發(fā)生改變:從集合中獲取元素時(shí),得到了這個(gè)元素的一個(gè)新,但并不是一個(gè)新副?。所以,對(duì)dataArray調(diào)用objectAtIndex:方法時(shí),返回的對(duì)象與dataArray中的第一個(gè)元素都指向內(nèi)存中的同一個(gè)對(duì)象。隨后,修改string對(duì)象的mStr的副作用就是同時(shí)改變了dataArray的第一個(gè)元素。dataArray2的第一元素發(fā)生改變:這與默認(rèn)的淺方式有關(guān)。使用mutableCopy方法數(shù)組時(shí),在內(nèi)存中為新的數(shù)組對(duì)象分配了空間,并且將單個(gè)元素到新數(shù)組中。但是,這僅僅是將一個(gè)數(shù)組的元素到另一個(gè)數(shù)組。那么,這兩個(gè)數(shù)組中的每個(gè)元素指向內(nèi)存中的同一個(gè)字符串。這與將一個(gè)對(duì)象容的副?dataArray2dataArray的第一個(gè)元素,可以創(chuàng)建一個(gè)新字符串,并將它到dataArray2的第一個(gè)位置,如下所示:mStr= objectAtIndex:0]: N replaceObjectAtIndex: withObject:這樣,替換數(shù)組中的對(duì)象后,mStrdataArray2的第一個(gè)元素仍指向內(nèi)存中的同一個(gè)對(duì)象。這意味著隨后在程序中對(duì)mStr做的修改也將更改數(shù)組的第一個(gè)元素。 若對(duì)象是NSString、NSDictionary、NSArray、NSData、NSNumber對(duì)象時(shí),可以使用參數(shù)atomically為YES,表示先將數(shù)據(jù)寫到臨時(shí)備份文件中,一旦成功,再轉(zhuǎn)移到文件中。#import<Foundation/NSObject.h>#import<Foundation/NSString.h>##import<Foundation/NSAutoreleasePool.h>intmain(intargc,char*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];NSDictionary*glossary1= dictionaryWithObjectsAndKeys@"Aclassdefinedsootherclassescaninhert",@" @"Toimplementallthemethoddefinedinaprotocol",@"adopt",@"Storinganobjectforlateruse",@"archiving",if([glossarywriteToFile:@"glossary "atomically:YES]==NO)NSLog(@"Savetofilefailed!");NSDictionary*glossary2=[NSDictionarydictionaryWithContentOfFile:"glossary"];for(NSString*keyinglossary2)[pooldrain]; 0}glossary文件里保存的數(shù)據(jù)格式是<key>...</key><要讀回?cái)?shù)據(jù)使用dataWithContentOfFile要讀回字符串對(duì)象使用stringWithContentOfFile注:屬性列表可以來(lái)自任何的源,可以來(lái)自文?編輯器或者PropertyListEditorNSKeyedArchiver使用NSKeyedArchiver類創(chuàng)建帶鍵的,在帶鍵的中,每個(gè)歸檔的字段都有一個(gè)名稱。歸檔某NSKeyedArchiver類中的archiveRootObject:toFile:方法將數(shù)據(jù)對(duì)象到磁盤上。NSDictionary*glossary=[NSKeyedArchiverarchiveRootObject:glossary通過(guò)NSKeyedUnarchiver類中的unArchiveObjectWithFile:方法將創(chuàng)建的歸檔文件讀入執(zhí)行的程序中。NSDictionary*glossary=[NSKeyedUnar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度辦公樓安防系統(tǒng)維修維護(hù)合同樣本4篇
- 二零二五年度個(gè)人倉(cāng)儲(chǔ)租賃合同(冷鏈物流專用)4篇
- 廈門市茶葉買賣合同
- 車輛租用協(xié)議
- 字畫贈(zèng)與合同
- 2025-2030全球平行雙主軸車銑中心行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)膠片掃描儀行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 二零二四年環(huán)保設(shè)備上門清潔與性能優(yōu)化合同3篇
- 二零二五年度電商客服團(tuán)隊(duì)協(xié)作與溝通協(xié)議
- 二零二五版酒店窗簾更換與節(jié)能減排服務(wù)合同3篇
- 2024年鄉(xiāng)村振興(產(chǎn)業(yè)、文化、生態(tài))等實(shí)施戰(zhàn)略知識(shí)考試題庫(kù)與答案
- 現(xiàn)代科學(xué)技術(shù)概論智慧樹(shù)知到期末考試答案章節(jié)答案2024年成都師范學(xué)院
- 軟件模塊化設(shè)計(jì)與開(kāi)發(fā)標(biāo)準(zhǔn)與規(guī)范
- 網(wǎng)絡(luò)安全基礎(chǔ)知識(shí)入門教程
- AI智慧物流園區(qū)整體建設(shè)方案
- 2024年遼寧鐵道職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 無(wú)痛人工流產(chǎn)術(shù)課件
- 有機(jī)農(nóng)業(yè)種植模式
- 勞務(wù)派遣招標(biāo)文件
- 法醫(yī)病理學(xué)課件
- 采空區(qū)穩(wěn)定性可靠度分析
評(píng)論
0/150
提交評(píng)論