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

溫馨提示×

溫馨提示×

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

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

Objective-C之成魔之路【15-Foundation框架】

發布時間:2020-06-06 23:21:32 來源:網絡 閱讀:276 作者:danielzzu 欄目:移動開發

郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。

如果文章對您有所幫助,歡迎給作者捐贈,支持郝萌主,捐贈數額隨意,重在心意^_^ 

我要捐贈: 點擊捐贈

Cocos2d-X×××:點我傳送



概述
Mac OS X開發會使用 Cocoa框架,
它是一種支持應用程序提供豐富用戶體驗的框架, 
它實際上由: Foundation和Application Kit(AppKit)和 Core Data框架組成。 
iOS開發, 會使用 Cocoa Touch框架, 
它實際上由: Foundation、Core Data和UIKit框架組成。 
AppKit和UIKit框架都是與窗口 、 按鈕、 列表等相關的類。
Foundation是Mac OS X和iOS應用程序開發的基礎框架, 
它包括了一些基本的類, 如: 數字、 字符串、 數組、 字典等。

快速概要:

光標放在需要搜索的類、方法或變量上,按住Option鍵,同時單擊鼠標,你會看到所選擇內容的快速概要。

在面板的右上角注意到有兩個圖標:第一個是一本書,第二個是一個字符h。

單擊那個書的圖標,Xcode會查找選擇的類、協議、定義或者方法的相關文檔。

單擊字符h的圖標,將會顯示包含選擇項目定義的頭文件。


MAC OS X在線參考庫,地址是點擊打開鏈接。


要使用Foundation框架中的類,要先引用頭文件:

#import <Foundation/Foundation.h>

實際上,因為Foundation.h文件導入Foundation所有的頭文件,所以不必擔心是否導入正確的頭文件。

但使用這條語句會明顯增加程序的編譯時間。

所以,一般import用到的頭文件。不要用太大的import。


基本數據類型:

int、 char、 float和double都不是類, 

具有方法、 成員變量和屬性, 以及面向對象的特征。 

為了實現“一切都是對象” 的承諾, 

因此在Foundation框架中使用NSNumber類來封裝這些數字類型。 

這樣數字就具有了面向對象的基本特征了。


也就是說:如果需要存儲基本數據類型(包括char數據類型),可以使用NSNumber類,

它會依據這些數據的類型創建對象。

對于每種基本數據類型,類方法都能為它創建一個NSNumber對象,并設置為指定的值。


NSNumber類構造函數
采用 + numberWithInt: 等“+ number” 開頭的類級構造方法, 可以從基本數據類型構建NSNumber對象。 
而使用 –intValue方法可以從NSNumber對象獲得基本數據類型。 

這些方法以numberWith開頭,緊接著數據的類型,如:numberWithLong:
NSNumber *intNumber= [NSNumber numberWithInteger:80]; NSNumber *floatNumber = [NSNumber numberWithFloat: 80.00]; int myint = [intNumber intValue]; float myfloat = [floatNumber floatValue];

注意,方法numberWithInt:和numberWithInteger:使用有些差別,遵循以下一些規則:

1)如果使用numberWithInt:方法創建一個整型數,需要使用intValue獲取它的值,使用%i作為格式化字符串顯示它的值。

2)如果使用numberWithInteger:方法創建一個整型數,需要使用integerValue獲取它的值,也可以轉換成long顯示或使用stringWithFormat:將它格式化為字符串。使用%li作為格式化字符串。


比較兩個NSNumber對象大小
可以轉化成為基本數據類型比較, 當然可以使用 NSNumber的方法比較, 
這就是對象的優勢了, 與比較相關方法有:
isEqualToNumber: 和compare: 。 
isEqualToNumber: 只是比較是否相對, compare: 可以比較大小。
if ([intNumber isEqualToNumber: floatNumber] == YES) { NSLog(@"相等"); } else { NSLog(@"不相等"); } if ([intNumber compare: myNumber] == NSOrderedAscending) { NSLog(@"第一個數小于第二個數"); }
NSOrderedAscending是枚舉類型NSComparisonResult的其中成員, 代表第一個數小于第二個數, 
此外還有NSOrderedSame成員代表第一個數等于第二個數, 
NSOrderedDescending成員代表第一個數大于第二個數。

字符串類
在Foundation框架中字符串類有兩種: 
NSString不可變字符串類和NSMutableString可變字符串類。 
NSString是定義固定大小的字符串, 
NSMutableString是可對字符串做追加、刪除、 修改、 插入和拼接等操作而不會產生新的對象。

NSString類

NSSTring的類,用于處理字符串對象。然而C樣式的字符串由char字符組成,NSString對象由unichar字符組成。

要使用Objective-C語言創建一個常量字符串對象,需要在字符串開頭放置一個@字符。

創建字符串對象時,會創建一個內容不可更改的對象,這稱為不可變對象。

需要制定一個范圍確定子字符串,使用特殊的數據類型NSRange類創建對象。

實際上,它是結構的typedef定義,包含location和length兩個成員。

如果沒有找到這個字符串,則返回范圍的location成員被設置為NSNotFound。


stringWithString:類級構造方法創建NSString對象,NSString構造方法還有很多;
length,返回Unicode字符的長度;
stringByAppendingString:實現了字符串的拼接,這個方法會產生下一新的對象;
isEqualToString:比較兩個字符串是否相等;
compare: 比較兩個字符串大小;
substringToIndex:可以獲得字符串的前x個字符串;
substringFromIndex:可以截取x索引位置到尾部字符串;
rangeOfString:字符串查找;

下面來看一段示例代碼:
#import <Foundation/Foundation.h>  int main (int argc, const char * argv[]) {     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 	 	NSString *str1 = @"aBcDeFgHiJk"; 	NSString *str2 = @"12345"; 	NSString *res; 	NSComparisonResult compareResult; 	NSRange subRange; 	 	//字符個數 	NSLog(@"字符串str1長度: %i",[str1 length]); 	//拷貝字符串到res 	res = [NSString stringWithString: str1]; 	NSLog(@"拷貝: %@", res); 	//拷貝字符串到str1尾部 	str2 = [str1 stringByAppendingString: str2]; 	NSLog(@"連接字符串: %@", str2); 	 	//測試字符串相等 	if ([str1 isEqualToString: res] == YES) { 		NSLog(@"str1 == res"); 	} else { 		NSLog(@"str1 != res"); 	} 	//測試字符串 < > ==  	compareResult = [str1 compare: str2]; 	if (compareResult == NSOrderedAscending) { 		NSLog(@ "str1 < str2"); 	} else if (compareResult == NSOrderedSame) { 		NSLog(@ "str1 == str2"); 	} else { 		NSLog(@ "str1 > str2"); 	} 	res = [str1 uppercaseString]; 	NSLog(@"大寫字符串:%@", res); 	res = [str1 lowercaseString]; 	NSLog(@"小寫字符串:%@", res); 	NSLog(@"原始字符串: %@", str1); 	 	//獲得前三個數 	res = [str1 substringToIndex: 3]; 	NSLog(@"字符串str1的前三個字符: %@",res); 	res = [str1 substringFromIndex: 4]; 	NSLog(@"截取字符串,從第索引4到尾部: %@",res); 	 	res = [[str1 substringFromIndex: 3] substringToIndex: 2]; 	NSLog(@"截取字符串,從第索引3到5: %@",res); 	 	//字符串查找	 	subRange = [str2 rangeOfString: @"34"]; 	 	if (subRange.location == NSNotFound) { 		NSLog(@"字符串沒有找到"); 	} else { 		NSLog (@"找到的字符串索引 %i 長度是 %i",  			   subRange.location, subRange.length); 	} 	 	 	[pool drain];	 	return 0; 	 }
我們解釋一下主要代碼:
str2 = [str1 stringByAppendingString: str2] 語句是將兩個字符串對象拼接在一起, 
由于NSString是不可變字符串類, 這會產生一個新的對象。 
subRange = [str2 rangeOfString: @"34"] 中的rangeOfString: 方法會返回一個NSRange結構體, 
它的location成員是找到的字符串的索引 , 它的length成員是找到的字符串的長度。

NSMutableString 類

NSMutableString類可以用來創建可以更改字符的字符串對象。

注意,如果替換字符串中還包括搜索字符串(如:使用字符串“ax”替換字符串“a”),

那么將會陷入無限循環。

其實,這個是和它的實現原理有關系,一般這種替換使用的方法使用了遞歸調用。


stringWithString: 類級構造方法創建NSString對象,NSMutableString構造方法還有很多; 
insertString: 插入字符串, 不會創建新的對象; 
appendString: 追加字符串, 不會創建新的對象; 
deleteCharactersInRange: 在一個范圍內刪除字符串, 不會創建新的對象; 
replaceCharactersInRange: withString: 替換字符串, 不會創建新的對象;
再看斷示例代碼:
#import <Foundation/Foundation.h>  int main (int argc, const char * argv[]) {     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 	 	NSString *str1 = @"Objective C"; 	NSString *search,*replace; 	NSMutableString *mstr; 	NSRange substr; 	 	//從不可變的字符創建可變字符串對象 	mstr = [NSMutableString stringWithString: str1]; 	NSLog(@" %@", mstr); 	 	//插入字符串 	[mstr insertString: @ " Java" atIndex: 9]; 	NSLog(@" %@", mstr); 	//具有連接效果的插入字符串 	[mstr insertString: @ " and C++"atIndex: [mstr length]]; 	NSLog(@" %@", mstr); 	//字符串連接方法 	[mstr appendString: @ " and C"]; 	NSLog(@" %@", mstr);	 	//使用NSRange刪除字符串 	[mstr deleteCharactersInRange:NSMakeRange(16, 13)]; 	NSLog(@" %@", mstr);	 	//查找字符串位置 	substr = [mstr rangeOfString: @ "string B and"]; 	if (substr.location != NSNotFound) { 		[mstr deleteCharactersInRange: substr]; 		NSLog(@" %@", mstr); 	} 	//直接設置可變字符串 	[mstr setString: @ "This is string A "]; 	NSLog(@" %@", mstr); 	 	[mstr replaceCharactersInRange: NSMakeRange(8, 8) 						withString: @ "a mutable string "]; 	NSLog(@" %@", mstr); 	//查找和替換 	search = @"This is "; 	replace = @"An example of "; 	 	substr = [mstr rangeOfString:search]; 	 	if (substr.location != NSNotFound) { 		[mstr replaceCharactersInRange:substr withString: replace]; 		NSLog(@" %@", mstr); 	} 	//查找和替換所有的情況 	search = @"a"; 	replace = @"X"; 	substr = [mstr rangeOfString: search]; 	 	while (substr.location != NSNotFound) { 		[mstr replaceCharactersInRange:substr withString: replace]; 		substr = [mstr rangeOfString: search]; 	} 	NSLog(@" %@", mstr); 	 	 	     [pool drain];      	return 0; }
我們解釋一下主要代碼:
語句[mstr deleteCharactersInRange:NSMakeRange(16, 13)] 是刪除指定范圍的字符串, 
函數NSMakeRange 是創建NSRange結構體, 其中第一個參數是位置, 第二個參數是長度, 
語句[mstr replaceCharactersInRange: NSMakeRange(8, 8) withString:@“a mutable string ”] 替換指定訪問的字符串。 
[mstr deleteCharactersInRange: substr] 語句是刪除指定范圍的字符串。

數組類
在Foundation框架中數組被封裝成為類

數組對象:是Foundation數組是有序的對象集合。

數組有兩種

NSArray不可變數組類和NSMutableArray可變數組類


注意,需要標記參數數組的結束,將這個數組的最后一個值定為nil,它實際上并不會存儲在數組中。

數組中的元素是由它們的索引數確定的。與NSString對象類似,索引從0開始。

可以通過NSLog格式化字符串%@顯示整個數組。


NSArray類
NSArray有很多方法, 下面是總結常用的方法: 
count: 返回當前數組的長度; 
objectAtIndex: 按照索引返回數組中的元素; 
containsObject: 是否包含某一元素; 
arrayWithObjects: 類級構造方法; 
initWithObjects: 實例構造方法
NSArray的實例代碼如下:
#import <Foundation/Foundation.h>  int main (int argc, const char * argv[]) {     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];      NSArray *weeksNames = [NSArray arrayWithObjects:  						   @"星期一",@"星期二",@"星期三",@"星期四" 						   ,@"星期五",@"星期六",@"星期日",nil];     NSLog(@"星期名字");     NSLog(@"====   ====");     int i;     for (i=0; i < [weeksNames count];i++) {     	NSLog(@"%2i     %@ ", i+1, [weeksNames objectAtIndex: i]);    	     } 	 	     [pool drain];     return 0; }
arrayWithObjects可以用來創建使用一列對象作為元素的數組。 
在這種情況下, 按順序列出對象并使用逗號隔開。 
使用這個方法必須在列表的最后指定一個結束標志nil 。 
count可以獲得數組的長度。 數組的下標是從0開始的

NSMutableArray類
NSMutableArray是NSArray的子類, NSMutableArray有很多方法, 
下面是總結常用的方法: 
addObject: 在數組的尾部追加一個元素; 
insertObject: 在數組的添加一個元素; 
atIndex: 按照索引插入一個元素; 
removeObjectAtIndex: 移除特定索引的元素; 
removeObject: 移除特定元素; 
initWithCapacity: 實例構造方法

#import <Foundation/Foundation.h>  int main (int argc, const char * argv[]) {     	NSMutableArray *weeksNames = [[NSMutableArray alloc] initWithCapacity: 3];     [weeksNames addObject: @"星期一"];    	[weeksNames addObject: @"星期二"];     [weeksNames addObject: @"星期三"];    	[weeksNames addObject: @"星期四"];     [weeksNames addObject: @"星期五"];     	[weeksNames addObject: @"星期六"];     [weeksNames addObject: @"星期日"];   	 	NSLog(@"星期名字");     NSLog(@"====   ===="); 	     int i;     for (i=0; i < [weeksNames count];i++)      	NSLog(@"%2i     %@ ", i+1, [weeksNames objectAtIndex: i]);  	 	[weeksNames release];      return 0; 	 }
[[NSMutableArray alloc] initWithCapacity: 3] , 可以初始化可變數組并分配3個初始單元, 
如果超過了容量會自動追加的。 
addObject方法可以向數組中添加元素

NSValue:

數組這樣的Foundation集合只能存儲對象,不能存儲像int這樣的基本數據類型。

NSValue類正好可以將結構轉化為對象,并且把它存儲在集合中。

這種將結構化轉為對象的方式,簡稱為包裝(wrapping),

逆向的處理是從對象中解出基本類型,簡稱展開(unwrapping)。


字典類
字典集合, 它是由“鍵-值”對構成的集合。 
鍵集合不能重復,也就是說字典中的鍵必須是單值的;

值集合沒有特殊要求。 
鍵和值集合中的元素通常是字符串,但也可以是任何對象, 但是不能是nil。 

詞典可以使固定的,也可以是可變的。

可變詞典中的記錄可以動態添加和刪除。

和數組對象不一樣,詞典對象是無序的。

這個字典類與java中的HashMap很相似,也是key-value的格式。

舉例如下:
字典類數據結構模型, 
圖所示的“學生與學號”集合;
Objective-C之成魔之路【15-Foundation框架】
與數組類一樣, 字典類也分為NSDictionary不可變字典和NSMutableDictionary可變字典。 
Objective-C之成魔之路【15-Foundation框架】

NSDictionary類
NSDictionary有很多方法, 下面是總結常用的方法: 
count字典集合的長度; 
objectForKey: 通過鍵獲得值對象; 
allKeys: 返回所有鍵集合; 
arrayWithObjects: 類級構造方法; 
initWithObjects: 實例構造方法; 
initWithObjects:forKeys: 實例構造方法; 
initWithObjectsAndKeys: 實例構造方法; 
initWithContentsOfFile: 從屬性文件中創建對象;
#import <Foundation/Foundation.h>  int main (int argc, const char * argv[]) { 	     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  	NSArray * keys = [@"one two three four five" componentsSeparatedByString:@" "]; 	NSArray * values = [@"alpha bravo charlie delta echo" componentsSeparatedByString:@" "];  	NSDictionary * dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys]; 	 	NSLog(@"%@", [dict description]); 	 	[dict release]; 	     [pool drain];     return 0; }
NSArray * keys = [@“one two three four five”componentsSeparatedByString:@“ ”] 語句是將一個字符
串按照空格分割返回NSArray對象, 同理獲得values對象,
然后使用 NSDictionary * dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys] 語句
把keys和values放入到不可變字典對象dict中。

NSMutableDictionary類
NSMutableDictionary 是NSDictionary的子類,
NSMutableDictionary有很多方法, 下面是總結常用的方法: 
setObject: forKey: 通過鍵和值; 
removeObjectForKey: 按照鍵移除值; 
writeToFile: atomically: 把對象寫入到文件中;
#import <Foundation/Foundation.h>  int main (int argc, const char * argv[]) {     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 	 	NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];          // add objects     [mutable setObject: @"Tom" forKey: @"tom@jones.com"];     [mutable setObject: @"Bob" forKey: @"bob@dole.com" ]; 	 	NSLog(@"%@", [mutable description]); 	 	[mutable release]; 	     [pool drain];     return 0; }
NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init] 是采用默認的init構造方法創建
NSMutableDictionary對象mutable。 
[mutable setObject:@"Tom" forKey: @"tom@jones.com"] 語句是按照鍵tom@jones.com添加Tom對象。

集合對象:

set是一組單值對象集合,它可以是變的或不可以變的。

操作包括:搜索、添加、刪除集合中的成員(僅用于可變集合),比較兩個集合,計算兩個集合的交集和并集等。

這些集合對象包括:NSSet、NSMutableSet、NSIndexSet和NSCountedSet等。

注意,NSIndexSet沒有可變版本。

向AI問一下細節

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

AI

年辖:市辖区| 海城市| 弋阳县| 铜梁县| 井陉县| 驻马店市| 徐水县| 龙岩市| 叙永县| 边坝县| 牡丹江市| 扶余县| 根河市| 抚顺县| 深水埗区| 永靖县| 孟津县| 南平市| 乌苏市| 永福县| 阿尔山市| 洪湖市| 玉门市| 繁昌县| 简阳市| 澜沧| 二手房| 铜陵市| 来安县| 万盛区| 汉中市| 江川县| 澄江县| 涿鹿县| 阿拉善左旗| 大连市| 察隅县| 大新县| 泰州市| 彩票| 新田县|