中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Your first iOS app(9)——Working with Foundation

發布時間:2020-07-21 23:26:02 來源:網絡 閱讀:355 作者:三無青年 欄目:移動開發

Working with Foundation

使用Foundation框架


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



Value Objects

值對象

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

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

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

NSString and NSMutableString

NSData and NSMutableData

NSDate

NSNumber

NSValue


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

你從元類型數據(然后或許在方法參數中傳遞它)中創建值對象。在你的代碼中,你稍后訪問從對象的封裝數據。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)

.

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


.NSString*string=[NSStringstring];

.

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


Strings

字符串

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

NSString類給字符串提供的對象封裝方法,具有為存儲任意長度的字符串提供內存管理、支持不同字符編碼(特別是Unicode)、以及字符串格式化。因為你經常使用字符串,Objective-C提供一個簡化符號來從不變值中創建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提供一個簡化的符號用來創建NSNumber對象,代替需要調用初始化或類工廠方法來創建對象。只是在數值前加上符號@,并且跟著一個任意值,來創建NSNumber對象封裝整型值和浮點值,如下代碼所示:


.NSNumber*myIntValue= @32;

.

.NSNumber*myDoubleValue= @3.22346432;

.

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


.NSNumber*myBoolValue= @YES;

.

.NSNumber*myCharValue=@'V';

.

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


.NSNumber*myFloatValue= @3.2F

.


Collection Objects

集合對象

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

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

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

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

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

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


Arrays

數組

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

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




Creating Arrays

創建數組

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

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


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

.

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

.

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

.

因為arrayWithObjectsinitWithObjects方法都以nil作為結束,可變參數,你必須以nil作為最后一個值。


.NSArray*someArray=

.

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

.

這個示例創建了一個像之前看到過的數組。第一個對象,someObject,將有一個數組索引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是一個無效的值。舉個例子,如果你嘗試執行下面的代碼,在運行時你會得到異常。


.idfirstObject=@"someString";

.

.idsecondObject=nil;

.

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

.

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

.


Querying Array Objects

查詢數組對象

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


.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.你也可以根據給定索引來查詢數組中的項目。如果你嘗試請求一個無效索引,在運行時你將得到一個 out-of-bounds的異常。為了避免異常,總是事先檢查項目的數量。


.if([someArraycount]>0){

.

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

.

.}

.

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

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


.if([someArraycount]>0){

.

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

.

.}

.


Sorting Array Objects

數組對象排序

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

舉個例子,你能通過調用compare:來為字符串數組進行排序。


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

.

.NSArray*sortedStrings=

.

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

.


Mutability

可變的

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


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

.

.NSArray*immutableArray= @[mutableString];

.

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


.if([immutableArraycount]>0){

.

.idstring=immutableArray[0];

.

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

.

.[stringappendString:@" World!"];

.

.}

.

.}

.

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


.NSMutableArray*mutableArray=[NSMutableArrayarray];

.

.[mutableArrayaddObject:@"gamma"];

.

.[mutableArrayaddObject:@"alpha"];

.

.[mutableArrayaddObject:@"beta"];

.

.

.

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

.

這個例子創建了一個由對象 @"epsilon", @"alpha", 和 @"beta"組成的數組。

也可以給可變數組排序,而不需要創建第二個數組。


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

.

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


Sets

集合

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



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

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


.NSSet*simpleSet=

.

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

.

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

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


.NSNumber*number= @42;

.

.NSSet*numberSet=

.

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

.

.// numberSet only contains one object

.


Dictionaries

字典

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

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



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


Creating Dictionaries

創建字典

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


.NSDictionary*dictionary=[NSDictionarydictionaryWithObjectsAndKeys:

.

.someObject,@"anObject",

.

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

.

.                      @42,@"magicNumber",

.

.someValue,@"aValue",

.

.nil];

.

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

Objective-C提供了一個簡單語法來創建字典。


.NSDictionary*dictionary= @{

.

.@"anObject":someObject,

.

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

.

.@"magicNumber": @42,

.

.@"aValue":someValue

.

.};

.

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


Querying Dictionaries

查詢字典

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


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

.

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

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


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

.


Mutability

可變

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


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

.

.[dictionaryremoveObjectForKey:@"anObject"];

.


Represent nil with NSNull

用NSNull表示nil

不可能添加nil到集合類,因為nil在Objective-C中意思是“沒有對象。”如果你想在集合中表示“沒有對象”,要使用NSNull類。


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

.

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


.for(idobjectinarray){

.

.if(object==[NSNullnull]){

.

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

.

.}

.

.}

.

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

Using Design Patterns

Writing a Custom Class

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

若尔盖县| 西峡县| 井研县| 霍城县| 天气| 丰都县| 富宁县| 茂名市| 内乡县| 永安市| 府谷县| 博白县| 四子王旗| 板桥市| 五华县| 基隆市| 中牟县| 铁力市| 金川县| 瓦房店市| 乐至县| 凉山| 吉林市| 江永县| 察雅县| 大名县| 黄骅市| 冀州市| 旌德县| 宿州市| 仪征市| 正镶白旗| 拜泉县| 称多县| 湟源县| 淳化县| 怀化市| 临清市| 甘南县| 辽中县| 达州市|