真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

YourfirstiOSapp(9)——WorkingwithFoundation

Working with Foundation

專注于為中小企業(yè)提供做網(wǎng)站、成都做網(wǎng)站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)云龍免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。

使用Foundation框架

當你開始為你的app編寫代碼的時候,你將發(fā)現(xiàn)有很多的Objective-C框架你能夠利用。特別重要的是Foundation framework,它為所有的app提供了基礎的服務。Foundation框架包含了代表基本數(shù)據(jù)類型的值類(value classes)例如字符串和數(shù)字,以及存儲其他對象的集合類(collection class)。你將依賴值類和集合類來為你的ToDoList app編寫很多代碼。

Value Objects

值對象

Foundation框架提供一般值對象的類,包括字符串、二進制數(shù)據(jù)、日期和時間、數(shù)字和其他數(shù)值。

之對象是一個封裝了原始值(C數(shù)據(jù)類型)的對象,且給值提供了相應的服務。你經(jīng)常遇到的值對象是app 中調(diào)用的方法或者函數(shù)中作為返回值和參數(shù)存在的。框架中的不同部分——甚至不同框架——能通過傳遞值對象來改變數(shù)據(jù)。

一些在Foundation框架中的值對象例子:

NSString andNSMutableString

NSData andNSMutableData

NSDate

NSNumber

NSValue

因為值對象代表標量值,你能在集合中以及任何需要的地方使用他們。值對象有遠勝于他們封裝原始類型:他們讓你簡單高效的執(zhí)行某些封裝的操作。舉個例子,NSString類,有搜索和替換子字符串的方法,把字符串寫到文件或者URLs中,以及構建文件的系統(tǒng)路徑。

你從元類型數(shù)據(jù)(然后或許在方法參數(shù)中傳遞它)中創(chuàng)建值對象。在你的代碼中,你稍后訪問從對象的封裝數(shù)據(jù)。NSNumber類提供這種方法最清晰的例子

.intn=5;// Value assigned to primitive type

.

.NSNumber*numberObject=[NSNumbernumberWithInt:n];// Value object created from primitive type

.

.inty=[numberObjectintValue];// Encapsulated value obtained from value object (y == n)

.

絕大多數(shù)值類都可以通過聲明初始化和類工廠方法來創(chuàng)建他們的實例。類工廠方法——為客戶方便的實現(xiàn)類的實例化——聯(lián)合了分配和初始化在一個步驟里并且返回創(chuàng)建的對象。舉個例子,NSString類聲明一個string類方法它分配并初始化了一個新的累的實例并且返回這個實例到你的代碼。

.NSString*string=[NSStringstring];

.

除了創(chuàng)建之對象和讓你訪問他們封裝的值之外,大多數(shù)的值類為簡單的操作提供方法,例如對象比較。

Strings

字符串

Objective-C支持的字符串的約定和C一樣:單一的字符用單引號括起來,字符串用雙引號括起來。但是Objective-C框架通常不使用C字符串。他們使用NSString對象。

NSString類給字符串提供的對象封裝方法,具有為存儲任意長度的字符串提供內(nèi)存管理、支持不同字符編碼(特別是Unicode)、以及字符串格式化。因為你經(jīng)常使用字符串,Objective-C提供一個簡化符號來從不變值中創(chuàng)建NSString對象。。想要使用這個NSString文字,只要在雙引號前加上“@”。如下面的例子所示:

.// Create the string "My String" plus carriage return.

.

.NSString*myString=@"My String\n";

.

.// Create the formatted string "1 String".

.

.NSString*anotherString=[NSStringstringWithFormat:@"%d %@",1,@"String"];

.

.// Create an Objective-C string from a C string.

.

.NSString*fromCString=[NSStringstringWithCString:"A C string"encoding:NSUTF8StringEncoding];

.

Numbers

Objective-C提供一個簡化的符號用來創(chuàng)建NSNumber對象,代替需要調(diào)用初始化或類工廠方法來創(chuàng)建對象。只是在數(shù)值前加上符號@,并且跟著一個任意值,來創(chuàng)建NSNumber對象封裝整型值和浮點值,如下代碼所示:

.NSNumber*myIntValue= @32;

.

.NSNumber*myDoubleValue= @3.22346432;

.

你甚至可以封裝布爾值和字符值

.NSNumber*myBoolValue= @YES;

.

.NSNumber*myCharValue=@'V';

.

你可以創(chuàng)建一個NSNumber對象來代表無符號整型、長整型、常常整型、以及浮點值通過在后面分別添加字幕U、L、LL、和F。例如,要創(chuàng)建一個NSNumber對象封裝的浮點值,如下所示:

.NSNumber*myFloatValue= @3.2F

.

Collection Objects

集合對象

大多數(shù)Objective-C代碼中的集合對象是一個基本集合類——NSArray,NSSet, 和NSDictionary.的實例。這些類被用在管理對象組,所以任何你想要添加到集合中的項目必須是一個Objective-C類的實例。如果你想添加一個標量值,你必須先創(chuàng)建一個合適的NSNumber或NSValue實例來表示它。

任何你添加到集合中的對象將在集合的生存期內(nèi)生存。這是因為集合類使用強引用來跟蹤它們的內(nèi)容。除了跟蹤它們的內(nèi)容,每個集合類都很容易執(zhí)行某些任務,例如枚舉、訪問特定對象、或者查找特定的對象是否是集合的一部分。

NSArray,NSSet, 和NSDictionary 這些類的內(nèi)容在創(chuàng)建的的時候被設置。因為它們不能隨意被改變,它們被稱為不可變。它們每一個也擁有一個子類,叫做可變,允許你隨時添加或移除對象。不同類型的結合組織對象的方式如下:

NSArray 和NSMutableArray— 數(shù)組是對象的有序集合。你能通過數(shù)組中指定的位置(就是索引)來訪問對象。數(shù)組中的第一個元素索引是0(zero)。

NSSet 和NSMutableSet—集合儲存一組無序的對象,每個對象只能出現(xiàn)一次。你通常通過應用測試或者過濾集合中的對象來訪問集合中的對象。

NSDictionary 和NSMutableDictionary—字典將其條目以鍵-值對的方式存儲;鍵是唯一的標識符,通常是一個字符串,而值是一個你想存儲的對象。你通過鍵來訪問對象。

Arrays

數(shù)組

數(shù)組(NSArray)是用來表示對象的有序表。唯一的要求是每一個項目必須是Objective-C的對象——沒有要求每個對象是同一類的實例。

為了維持數(shù)組的有序性,每個元素都被儲存在從零開始的索引中。

Creating Arrays

創(chuàng)建數(shù)組

在本章前面的關于值類描述中,你能通過分配和初始化、類工廠方法、或數(shù)組字面值來創(chuàng)建一個數(shù)組。

根據(jù)對象的數(shù)目,有多種不同的有效的初始化和工廠方法。

.+(id)arrayWithObject:(id)anObject;

.

.+(id)arrayWithObjects:(id)firstObject,...;

.

.-(id)initWithObjects:(id)firstObject,...;

.

因為arrayWithObjects和initWithObjects方法都以nil作為結束,可變參數(shù),你必須以nil作為最后一個值。

.NSArray*someArray=

.

.[NSArrayarrayWithObjects:someObject,someString,someNumber,someValue,nil];

.

這個示例創(chuàng)建了一個像之前看到過的數(shù)組。第一個對象,someObject,將有一個數(shù)組索引0;最后一個對象,someValue,將有一個索引3。

它可能被無意的截斷列表,如果其中一個值提供的是nil。

.idfirstObject=@"someString";

.

.idsecondObject=nil;

.

.idthirdObject=@"anotherString";

.

.NSArray*someArray=

.

.[NSArrayarrayWithObjects:firstObject,secondObject,thirdObject,nil];

.

在這個例子中,someArray僅包含firstObject,因為secondObject的值是nil,它中斷了列表的項目。

It’s possible to create an array literal using a compact syntax.

.NSArray*someArray= @[firstObject,secondObject,thirdObject];

.

當使用這個語法,nil不會終止列表,nil是一個無效的值。舉個例子,如果你嘗試執(zhí)行下面的代碼,在運行時你會得到異常。

.idfirstObject=@"someString";

.

.idsecondObject=nil;

.

.NSArray*someArray= @[firstObject,secondObject];

.

.// exception: "attempt to insert nil object"

.

Querying Array Objects

查詢數(shù)組對象

在你創(chuàng)建了一個數(shù)組后,你能查詢它來獲取信息——例如它有多少對象或者它是否包含給定的項目。

.NSUIntegernumberOfItems=[someArraycount];

.

.

.

.if([someArraycontainsObject:someString]){

.

....

.

.}

.

You can also query the array for an item at a given index. If you attempt to request an invalid index, you’ll get an out-of-bounds exception at runtime. To avoid getting an exception, always check the number of items first.你也可以根據(jù)給定索引來查詢數(shù)組中的項目。如果你嘗試請求一個無效索引,在運行時你將得到一個 out-of-bounds的異常。為了避免異常,總是事先檢查項目的數(shù)量。

.if([someArraycount]>0){

.

.NSLog(@"First item is: %@",[someArrayobjectAtIndex:0]);

.

.}

.

這個例子檢查是否項目數(shù)量超過零。如果是,則FoundationNSLog函數(shù)記錄第一個項目的描述,它有一個索引號,0。

作為objectAtIndex:的替代方法,你也能使用下標的語法來查詢數(shù)組,這種方法就像標準的C數(shù)組。之前的例子也能改寫如下:

.if([someArraycount]>0){

.

.NSLog(@"First item is: %@",someArray[0]);

.

.}

.

Sorting Array Objects

數(shù)組對象排序

NSArray類提供了各種各樣的方法來排序它集合的對象。因為NSArray是不可變的,所有的方法都返回一個新的包含排序的數(shù)組。

舉個例子,你能通過調(diào)用compare:來為字符串數(shù)組進行排序。

.NSArray*unsortedStrings= @[@"gammaString",@"alphaString",@"betaString"];

.

.NSArray*sortedStrings=

.

.[unsortedStringssortedArrayUsingSelector:@selector(compare:)];

.

Mutability

可變的

盡管NSArray類自身是不可變的,但它能包含可變對象。舉個例子,如果你添加一個可變字符串數(shù)組到不可變數(shù)組,如下所示:

.NSMutableString*mutableString=[NSMutableStringstringWithString:@"Hello"];

.

.NSArray*immutableArray= @[mutableString];

.

沒有什么能阻止你改變字符串。

.if([immutableArraycount]>0){

.

.idstring=immutableArray[0];

.

.if([stringisKindOfClass:[NSMutableStringclass]]){

.

.[stringappendString:@" World!"];

.

.}

.

.}

.

如果你想在初始化創(chuàng)建后,從數(shù)組中移除對象,需要使用NSMutableArray,它增加了各種方法來添加、移除、或者替換一個或多個對象。

.NSMutableArray*mutableArray=[NSMutableArrayarray];

.

.[mutableArrayaddObject:@"gamma"];

.

.[mutableArrayaddObject:@"alpha"];

.

.[mutableArrayaddObject:@"beta"];

.

.

.

.[mutableArrayreplaceObjectAtIndex:0withObject:@"epsilon"];

.

這個例子創(chuàng)建了一個由對象@"epsilon",@"alpha", 和@"beta"組成的數(shù)組。

也可以給可變數(shù)組排序,而不需要創(chuàng)建第二個數(shù)組。

.[mutableArraysortUsingSelector:@selector(caseInsensitiveCompare:)];

.

在這種情況下,包含的項目按照升序、不分大小寫排序,@"alpha",@"beta", 和@"epsilon"。

Sets

集合

一個集合(NSSet)對象與數(shù)組類似,但它保持無序狀態(tài)且每組的對象必須不同。

因為集合沒有排序,所以當它進行成員調(diào)試時,能提供比數(shù)組更快的性能。

因為基本NSSet類不可變,它的內(nèi)容必須是在創(chuàng)建的時候指定,使用分配并初始化方法或類工廠方法都可以。

.NSSet*simpleSet=

.

.[NSSetsetWithObjects:@"Hello, World!", @42,aValue,anObject,nil];

.

和NSArray一樣,initWithObjects: 和setWithObjects方法都以結尾,參數(shù)數(shù)量可變。NSSet的可變子類名為NSMutableSet。

集合只存儲特定的對象一次,即使你多次嘗試也是如此。

.NSNumber*number= @42;

.

.NSSet*numberSet=

.

.[NSSetsetWithObjects:number,number,number,number,nil];

.

.// numberSet only contains one object

.

Dictionaries

字典

不同于簡單的排序或不排序對象的集合,字典 (NSDictionary) 通過給定的鍵來存儲有關聯(lián)的對象,鍵可以被用作檢索。

最好是使用字符串對象作為字典的鍵。

雖然你能用其他對象作為鍵,但是要為字典記住每一個鍵且必須支持NSCopying。但是,如果你想使用鍵-值編碼,你必須為字典對象使用字符串鍵(要學習更多,詳見Key-Value Coding Programming Guide))。

Creating Dictionaries

創(chuàng)建字典

你能使用分配初始化以及類工廠方法來常見字典,如下所示:

.NSDictionary*dictionary=[NSDictionarydictionaryWithObjectsAndKeys:

.

.someObject,@"anObject",

.

.@"Hello, World!",@"helloString",

.

.                      @42,@"magicNumber",

.

.someValue,@"aValue",

.

.nil];

.

作為dictionaryWithObjectsAndKeys: 和initWithObjectsAndKeys:方法,每個對象在它的鍵之前被指明,并且對象和鍵的列表最后要以nil結尾。

Objective-C提供了一個簡單語法來創(chuàng)建字典。

.NSDictionary*dictionary= @{

.

.@"anObject":someObject,

.

.@"helloString":@"Hello, World!",

.

.@"magicNumber": @42,

.

.@"aValue":someValue

.

.};

.

作為字典字面量,鍵在對象之前被指定,并且列表結尾沒有nil。

Querying Dictionaries

查詢字典

在你創(chuàng)建字典之后,你能要求他找到給定鍵的所存儲的對象。

.NSNumber*storedNumber=[dictionaryobjectForKey:@"magicNumber"];

.

如果對象沒有找到,objectForKey方法返回nil。

.這兒也可以使用下標法來代替objectForKey:

.NSNumber*storedNumber=dictionary[@"magicNumber"];

.

Mutability

可變

如果你想從創(chuàng)建好的字典中添加或者移除對象,需要使用NSMutableDictionary子類。

.[dictionarysetObject:@"another string"forKey:@"secondString"];

.

.[dictionaryremoveObjectForKey:@"anObject"];

.

Represent nil with NSNull

用NSNull表示nil

不可能添加nil到集合類,因為nil在Objective-C中意思是“沒有對象?!比绻阆朐诩现斜硎尽皼]有對象”,要使用NSNull類。

.NSArray*array= @[@"string", @42,[NSNullnull]];

.

對于NSNull,null方法總是返回相同的實例。有這種行為的類被稱為單例類(singleton classes)。你能檢查數(shù)組中的對象是否等于共享的NSNull實例,如下所示:

.for(idobjectinarray){

.

.if(object==[NSNullnull]){

.

.NSLog(@"Found a null object");

.

.}

.

.}

.

盡管Foundation框架包含比這里描述的更多的功能,你也不是必須要了解每一個細節(jié)。如果你想要學習更多的關于Foundation的內(nèi)容,參看Foundation Framework Reference?,F(xiàn)在,你已經(jīng)有足夠的信息來繼續(xù)實現(xiàn)ToDoList app,你將會同伙編寫自定義數(shù)據(jù)類來做到這一點。

Using Design Patterns

Writing a Custom Class

Copyright 2014 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2013-10-22



分享名稱:YourfirstiOSapp(9)——WorkingwithFoundation
當前URL:http://weahome.cn/article/pgpggd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部