【轉載】oc語言基礎知識全面 看完oc基礎教程後再溫習一遍
OC部分
第一部分 基本概念
OC概述
OC是一種能夠完成複雜物件導向程式設計的簡單的計算機設計語言。
透過提供用於定義類和方法的語法,它擴充套件了標準的c語言。它還提供了類和介面(任何類採用)的動態擴充套件。
物件導向程式設計
-
物件導向 和 程式導向
物件導向 OOP(Object Oriented Programming) 分解問題組成的物件 協調物件間的聯絡和通訊 解決問題. 以物件為中心 也就是引數事件的參與者,設計物件的功能完成事件只是事物所有功能中的一小部分.
程式導向 POP (Procedure Oriented Programming) 分析解決問題的步驟 實現函式 依次呼叫. 事件為中心 關心該事件的詳細步驟 一步一步如何完成實現.
類和物件 - 類 只允許單繼承 一個類只允許一個父類 沒有父類的類稱為根類 NSObject 根類 OC裡唯一一個沒有父類的類
類:一組具有相同特徵和行為的事物的抽象集合。 是一個抽象的概念,在生活中不具體. 靜態屬性 特徵 動態屬性 動作
物件:類中具體的。物件是類的例項。類的具體表現.
靜態型別化 :可以一眼看出物件屬於哪個類; 動態型別化:不可以看出繼承與哪個類的物件宣告方法
類和物件是物件導向的核心。
三大步驟:定義類 ,建立物件,使用物件。
3.OC中類的定義
物件導向程式設計中使用物件完成程式
開發中:先定義類 ,在建立物件,然後使用物件。
定義類包含兩部分“:介面部分和實現部分。分開寫。
1.介面部分:對外宣告類的特徵和行為 提供外部訪問的介面 相當於說明書。 寫在 .h檔案中
介面部分標誌:@interface @end
作用: 宣告類的例項變數和方法,即特徵和方法
包含內容:類名 父類名 例項變數 方法。
(1)以@interface 介面開頭 Person 當前類名 : NSObject 當前類繼承的父類
(2)以@end//結束 只有把類的介面定義內容寫在開始和結束之間才有效.
(3) People 類名
(4) : 表示繼承 後面表示它有父類
(5) NSObject 父類名
2.實現部分:對內實現行為,相當於功能的實現。實現部分寫在.m檔案中
(1)以@implementation開頭 以@end結束 實現內容必須寫在中間才有效 (2)@implementation後的people是要實現的類(需要指定對哪些類實現)
實現部分標誌:@
類和檔案
類:@interface...@end 檔案 @implemention…@end
檔案:.h稱為介面檔案或者標頭檔案 .m稱為實現檔案。
預設設定如下:
1.使用類命名檔案
2..h檔案管理類的介面部分,.m檔案管理類的實現部分、
檔案和類本質沒有關係。為了方便管理實現封裝性。
- 建立物件
建立物件分兩步:分配記憶體空間和初始化
分配記憶體空間:根據類中宣告的例項變數為物件分配記憶體,將所有的例項變數置為預設值0,並返回首地址
初始化:
為物件的例項變數設定初始值。
使用物件
指標儲存物件的首地址,代指物件。OC中使用指標代指物件,進行操作。
Person *p =[Person alloc];先執行”=“ 右側
1.[ person alloc] 返回值是物件的首地址,即物件。
2.p是跟物件同型別的指標變數,儲存物件首地址,代指物件。
5.例項變數操作- (CGFloat)getValuea:(CGFloat)a b:(CGFloat)b c:(CGFloat)c;
方法只.h檔案中宣告 沒.m檔案中定義實現
解決方法 :在.m檔案裡實現 或者在.h裡刪掉
OC中方法呼叫 採用訊息傳送機制[receiver message];
[receiver(接收者 是 類(+) 或者 物件(-)) message(訊息)];
- NSLog的定義
NSLog定義在NSObjCRuntime.h中,如下所示:
void NSLog(NSString format, …);
基本上,NSLog很像printf,同樣會在console中輸出顯示結果。不同的是,傳遞進去的格式化字元是NSString的物件,而不是char 這種字串指標
NSLog可以如下面的方法使用:
NSLog (@"this is a test");
NSLog (@"string is :%@", string);
NSLog (@"x=%d, y=%d", 10, 20);
但是下面的寫法是不行的:
int i = 12345;
NSLog( @"%@", i );
原因是, %@需要顯示物件,而int i明顯不是一個物件,要想正確顯示,要寫成:
int i = 12345;
NSLog( @"%d", i );
NSLog的格式如下所示:
%@ 物件
%d, %i 整數
%u,%z 無符整形
%f 浮點/雙字
%x, %X 二進位制整數
%o 八進位制整數
%zu size_t
%p 指標
%e 浮點/雙字 (科學計算)
%g 浮點/雙字
%s C字串
%.*s Pascal字串
%c 字元
%C unichar
%lld 64位長整數(long long)
%llu 無符64位長整數
%Lf 64位雙字 -
類和物件
- 對於物件 +對於類
(id) 類似於C語言中的(void *) 泛指指標的返回地址
- 對於物件 +對於類
- 例項變數可見度 (瞭解)
public 公共的共有的 例項變數可以在類的外部和內部操作 訪問方式可以透過 :物件 + 指向運算子 + 例項變數 例如: p->name;
protected 受保護的 預設的 例項變數只能在該本類和子類內部操作
private 私有的 例項物件只能在該類內訪問,不可以在子類檔案以及其他檔案中訪問.
例項變數定義在.h中 相當於先宣告某一變數是某一型別的例項變數. 不設定可見度的時候,為預設的 受保護的 protected 定義方式
為什麼不宣告為@public :1. 外部就可以訪問內部以及修改,會影響內部的一個實現,提供外不訪問的介面.2.違背了OC三大物件導向的思想——封裝 隱藏內部實現,提供外界訪問的藉口.
為什麼不宣告為@private :1.子檔案訪問不到,子檔案還需另外宣告.2.違背oc的繼承父類有 子類就可以用
@public //單獨
NSString name;//姓名
@private
NSString gender;//性別
@protected
NSInteger age;//年齡
-
類的定義
介面部分和檔案實現部分可以寫在main.m裡 但需要寫在main函式的外面 相當於函式的宣告和實現
一個檔案裡可以有很多個類 只要符合 介面檔案的宣告和實現的框架就可以 和檔名沒有關係 一般情況下 一個檔案中就定義一個類 類的名字和檔案同名
//.m裡
@implementation aa
@end
//.h裡
@interface aa : NSObject
{
NSString name;
NSString sex;
}
@end - 方法
工程 所有單詞的首字母都要大寫
方法 第一個不大寫 以後所有的首字母都大寫
//self 誰呼叫該方法,self就代表誰 可用於物件 也可用於類 當方法是一個減號方法時 呼叫該方法的物件是誰 self就是當前物件 當方法是一個加號方法時,呼叫該方法的類是誰 self就代表當前類
加號方法即類方法 只能類使用 不能使用例項變數 例項變數是依託於物件存在的 只有有了物件 例項變數才會有效 這時候還沒有例項方法 比如給人個名字 但不知道給那個物件賦名字
unknown type name “women” 意思:不能識別的型別women 解決方案:#import標頭檔案時,會將標頭檔案中的內容複製一份,二檔使用women這個類時,該類還未定義,所以識別不了.典型的迴圈匯入問題. 解決方案 :使用該類時不能把它當做一個類來使用,所以在.h檔案裡使用@Class women;將women宣告為一個字串使用 ,但他不具有類中的內容,需要在.m裡面#import “women.h”匯入標頭檔案
.n檔案
1.以某些字元開頭 hasPrefix:)#> 後面填寫的是字串物件 @“”;返回值是一個bool型別 0或者1
BOOL isPrefix = [str4 hasPrefix:@"http"];
2,.以某些字元結束 hasSuffix:)#> 後面填寫的是字串物件 @“”;返回值是一個bool型別 0或者1
BOOL isSuffix = [str4 hasSuffix:@"com”];
3.查詢指定字串的範圍 rangeOfString:)#> - (NSRange)rangeOfString:(NSString )aString NSRange結構體重新命名得到的 返回值為:range.location 和range.length 只查詢有沒有 而不管有幾個 如果有返回開始下表和長度
NSRange range/(NSString NSStringFromRange)和前面的等價/ = [str4 rangeOfString:@"http"];
if (range.length == 0) {
NSLog(@"沒有相關的字串");
}else{
//將NSRange 結構體型別變數直接轉換成字串物件輸出
A structure used to describe a portion of a series—such as characters in a string or objects in an NSArray object.
/ typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
/
NSLog(@"%@",NSStringFromRange(range)); {0,4}返回值
//NSLog(@"locatio = %lu,length = %lu",range.location,range.length);等價於上面的方法
NSString * NSStringFromRange (
NSRange range);
}
- 字串擷取 從給定下表到結束 substringFromIndex substringToIndex substringWithRange 由於操作的是不可變的字串 這裡操作的是副本
NSString str5 = [NSString stringWithFormat:@"lanou is a big company"]; //便利構造器的方法 快速產生字串物件
1.獲取給定下標之後的字串,包含指定下標對應的字元 空格也要算在內 from包含
//例如要獲取company
NSString subString1 = [str5 substringFromIndex:15];
NSLog(@"subString = %@",subString1);
2.獲取給定下標之前的字串,不包含指定下標對應的字元 空格也要算在內 to不包含
// 如:lanou
NSString *subString2 = [str5 substringToIndex:5];
NSLog(@"subString = %@",subString2);
3.獲取制定一個範圍的字串 substringWithRange Returns a string object containing the characters of the receiver that lie within a given range.
- (NSString )substringWithRange:(NSRange)aRange
//例如獲取:lanou 利用NSMakeRange(0, 5)
NSString subString3 = [str5 substringWithRange:NSMakeRange(0, 5)];
NSLog(@"subString3 = %@",subString3);
4.字串拼接 stringByAppendingFormat Returns a string made by appending to the receiver a string constructed from a given format string and the following arguments. - (NSString )stringByAppendingFormat:(NSString )format, ...
stringByAppendingString Returns a new string made by appending a given string to the receiver. - (NSString )stringByAppendingString:(NSString )aString
NSString str6 = [NSString stringWithFormat:@"lanou"];
//lanou 後拼接 henan
NSString newStr6 = [str6 stringByAppendingString:@"henan"];//不可以出現格式串
NSLog(@"newStr6 = %@",newStr6);
//lanou 後拼接 henan9ban
NSString newStr7 = [str6 stringByAppendingFormat:@"henan%dban",9];//可以出現格式串
NSLog(@"newStr7 = %@",newStr7);
NSString newStr8 = [str6 stringByAppendingFormat:@"%@",newStr7];//特別注意可以拼接物件
NSLog(@"newStr8 = %@",newStr8);
5.替換字串 stringByReplacingOccurrencesOfString: withString: Returns a new string in which all occurrences of a target string in the receiver are replaced by another given string.
- (NSString )stringByReplacingOccurrencesOfString:(NSString )target withString:(NSString )replacement
NSString str8 = [NSString stringWithFormat:@"lan ouououououououou isabigcompany"];
//(1)將ou替換成nb
NSString newStr9 = [str8 stringByReplacingOccurrencesOfString:@"ou"withString:@"牛逼"]; //換掉誰誰在前 換上誰 誰在前
NSLog(@"newStr8 = %@",newStr9);
//2.只將第一個ou換成牛逼 如果替換兩個 就寫兩次 牛逼
NSString newStr10 = [str8 stringByReplacingCharactersInRange:NSMakeRange(4, 2) withString:@"牛逼"];
NSLog(@"%@",newStr10);
6.字串比較 返回值為 列舉型別
Returns the result of invoking compare:options:range: with no options and the receiver’s full extent as the range.
- (NSComparisonResult)compare:(NSString *)aString
NSComparisonResult 返回值型別 列舉型別
NSComparisonResult result = [@"111" compare:@"222"];//前一個比後一個小 升序返回 -1
NSLog(@"%ld",result);
7.將數字轉為字串物件
NSString *str12 = [NSString stringWithFormat:@"%f",5.2];//將5.2轉換為字串物件
1.字串大小寫轉換
8.字串的大小寫轉換函式
1.將@"lan ghasgda HGASIDHH JHFWIEFH J OU"全部轉換成大寫 uppercaseString Returns a uppercased(大寫字母印刷 ) representation of the receiver.
-
(NSString *)uppercaseString 無引數 有返回值 訊息傳送機制
NSString *upperString = [@"lan ghasgda HGASIDHH JHFWIEFH J OU" uppercaseString]; NSLog(@"upperString = %@",upperString);
2.將@"lan SJA Hjknjkjnkdj sdjkjsd OU"全部轉換成小寫 lowercaseString Returns lowercased representation of the receiver.
- (NSString )lowercaseString 無引數 有返回值 訊息傳送機制
NSString lowerString = [@"lan SJA Hjknjkjnkdj sdjkjsd OU" lowercaseString];
NSLog(@"lowerString = %@",lowerString);
3.將@"lan bdfh bsdjksbajf jksdbfjkwdbfjk OU"首轉換成大寫 capitalizedString Returns a capitalized(首字母大寫的) representation of the receiver. - (NSString )capitalizedString 無引數 有返回值 訊息傳送機制
NSString capitilizedString = [@"lan bdfh bsdjksbajf jksdbfjkwdbfjk OU" capitalizedString];
NSLog(@"capitilizedString = %@",capitilizedString);
常用的可變字串處理例項方法
NSMutableString 這裡需要注意的是該方法的處理方式是在原字串上直接進行修改
1.– appendFormat:
Adds a constructed string to the receiver.
新增一個字串構造的接收器
- (void)appendFormat:(NSString )format …
NSMutableString str = [NSMutableString stringWithFormat:@"lanouhenan"];
//1.在原字串的基礎上拼接Frank appendFormat 對於字串的修改都是在字串基礎上修改,所以修改完的字串內容發生變化 所以不需要返回值
[str appendFormat:@"Frank"];
NSLog(@"%@",str);// lanouhenanFrank
2.– appendString:
Adds to the end of the receiver the characters of a given string.
增加了接收器的端部在給定的字串的字元
-
(void)appendString:(NSString *)aString
NSMutableString *str = [NSMutableString stringWithFormat:@"lanouhenan”];
//2.在原字串的基礎上拼接Frank
[str appendString:@"Frank”];
NSLog(@"%@",str);// lanouhenanFrankFrank
•
•
• 3.– deleteCharactersInRange:
•
Removes from the receiver the characters in a given range.
從接收機中刪除給定範圍內的字元
- (void)deleteCharactersInRange:(NSRange)aRange
NSMutableString *str = [NSMutableString stringWithFormat:@"lanouhenan”];
//3.刪除字串 在原字串基礎上刪除
//如 刪除 henan
[str deleteCharactersInRange:NSMakeRange(5, 5)];
NSLog(@"%@",str);//lanouhenanFrankFrank
•
•
• 4.– insertString:atIndex:
•
Inserts into the receiver the characters of a given string at a given location.
插入到接收器給定的字串中的字元在給定的位置。
- (void)insertString:(NSString )aString atIndex:(NSUInteger)anIndex
NSMutableString str = [NSMutableString stringWithFormat:@"lanouhenan”];
//4.插入字串 在原字串基礎上插入
[str insertString:@"henan" atIndex:5];
NSLog(@"%@",str);//lanouhenanFrankFrank
• 5.– replaceCharactersInRange:withString:
•
Replaces the characters from aRange with those in aString.
取代了aRange人物與那些在ASTRING。
- (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString )aString
NSMutableString str = [NSMutableString stringWithFormat:@"lanouhenan”];
//5.替換字串 在元字串基礎上將Frank替換成Duck
[str replaceCharactersInRange:NSMakeRange(10, 5) withString:@"Duck"];
NSLog(@"%@",str);//lanouhenanDuckFrank
• 6.– replaceOccurrencesOfString:withString:options:range:
•
Replaces all occurrences of a given string in a given range with another given string, returning the number of replacements.
替換在給定的範圍內與其他給定的字串給定的字串的所有匹配,返回替換的數量。
- (NSUInteger)replaceOccurrencesOfString:(NSString )target withString:(NSString )replacement options:(NSStringCompareOptions)opts range:(NSRange)searchRange
NSMutableString str1 = [NSMutableString stringWithFormat:@"lanouhenanjdsfhdfhjdfsdjfj”]; //可變的字串處理函式
NSString str13 = [str1 stringByReplacingCharactersInRange:NSMakeRange(10, 5) withString:@"Duck”];//不可變的字串處理函式
NSLog(@"%@",str1);//lanouhenanjdsfhdfhjdfsdjfj
NSLog(@"%@",str13);//lanouhenanDuckdfhjdfsdjfj
//這裡可以結合函式的傳值呼叫和傳址呼叫,需要明白的NSString在處理字串物件時是將字串複製副本,針對副本進行操作 所以上面的返回值裡有兩中不同的結果.
• 7.– setString:
•
Replaces the characters of the receiver with those in a given string.
替換與一個給定的字串中的接收器的特徵。
-
(void)setString:(NSString )aString
NSMutableString str = [NSMutableString stringWithFormat:@"lanouhenan”];
注:本文中的所有程式碼需要前後結合來看.
陣列的價值:(1)存數多個元素(2)儲存元素只能是物件,物件可以是不同型別(3)陣列是一個有序的集合(4)陣列中的元素可以重複,而且重複的元素可以成為陣列元素
NSArray 不可變陣列物件
Creating an Array 利用便利構造器方法- arrayWithObjects:
Creates and returns an array containing the objects in the argument list.
建立並返回包含在引數列表中的物件的陣列。
- arrayWithObjects:
- (instancetype)arrayWithObjects:(id)firstObj,,…
- initWithObjects:
Initializes a newly allocated set with members taken from the specified list of objects.
初始化一個新分配的一套從物件的指定名單中的成員。
- (instancetype)initWithObjects:(id)firstObj, …
建立陣列物件
//1.使用便利構造器
//1.arrayWithObjects 元素與元素之間用逗號間隔 輸出格式 (aa,bb,cc)
//2.以nil結束 nil後面的元素都不會放入陣列中
NSArray arr1 = [NSArray arrayWithObjects:@"aa",@"bb",@"5",nil,@"cc", nil];
NSLog(@"arr1 = %@",arr1);//arr1 = (aa,bb,5)
//2.使用初始化方法
NSArray arr2 = [[NSArray alloc] initWithObjects:@"aa",@"bb",@"5",nil,@"cc",nil];
NSLog(@"arr2 = %@",arr2);//arr2 = (aa,bb,5)
- count:
Returns the number of objects currently in the array.
返回當前陣列的物件的數量。
- (NSUInteger)count
獲取元素個數
NSUInteger count = [arr2 count];
NSLog(@"count = %lu",count); //count = 3;
- objectAtIndex:透過下標取元素
Returns the object at the specified index of the set.
返回集合的指定索引處的物件。
- (id)objectAtIndex:(NSUInteger)index
- firstObject:
Returns the first object in the array.
返回的陣列中的第一個物件。
- (id)firstObject
- lastObject:
Returns the last object in the ordered set.
返回的有序集合的最後一個物件。
- (id)lastObject
根據索引值獲取物件
//(1)獲取制定下標的元素
NSString str = [arr2 objectAtIndex:1];
NSLog(@"str = %@",str);//str = bb;
//(2)獲取陣列中第一個元素 //The first object in the array. If the array is empty, returns nil. first和last方法比objectAtIndex更加安全,當陣列元素為空時會返回null,而objectAtIndex會造成程式的crash.即陣列下標越界.
NSString str1 = [arr2 firstObject];
NSLog(@"str1 = %@",str1);//str1 = aa
NSString str2 = [arr2 objectAtIndex:0];
NSLog(@"str2 = %@",str2);//str2 = aa
//(3)獲取陣列中最後個元素
NSString str3 = [arr2 lastObject];
NSLog(@"str3 = %@",str3);//str3 = 5
7.indexOfObject:透過物件返回下標
Returns the index of the specified object.
返回指定物件的索引。
- (NSUInteger)indexOfObject:(id)object
獲取陣列物件在陣列中的索引值; Returns the lowest index whose corresponding array value is equal to a given object.陣列中的元素可以重複,返回的為第一個.
NSUInteger index = [arr2 indexOfObject:@"5"];
NSLog(@"index = %lu",index);//index = 2
- containsObject:判斷某一個物件是否存在於陣列中
Returns a Boolean value that indicates whether a given object is present in the set.
返回一個布林值,表示給定的物件是否存在於集合中。
- (BOOL)containsObject:(id)anObject
判斷是否包含某個物件. Returns a Boolean value that indicates whether a given object is present in the set.//返回值為bool型別.
BOOL isExist = [arr2 containsObject:@"aa"];
NSLog(@"isExist = %d",isExist);//isExist = 1
- sortedArrayUsingSelector:
Returns an array that lists the receiving array’s elements in ascending order, as determined by the comparison method specified by a given selector.- (NSArray )sortedArrayUsingSelector:(SEL)comparator
陣列排序
NSArray sortArr = [arr2 sortedArrayUsingSelector:@selector(compare:)];//這裡傳入的是比較方法
NSLog(@"sortArr = %@", sortArr);
- (NSArray )sortedArrayUsingSelector:(SEL)comparator
10.forin
快速遍歷(快速列舉)
for (int i = 0; i NSString str4 = [arr2 objectAtIndex:i];
NSLog(@"%@",str4);
}
/
for (type object(陣列元素型別 物件名字) in collection(集合即:要取元素的陣列)) {
statements 輸出語句
} forin 快速遍歷,用於將集合中的元素遍歷出來.
/
for (NSString *str4 in arr2) {
NSLog(@"%@",str4);
}
NSMutableArray 可變的陣列物件處理函式
首先建立陣列物件,然後針對陣列物件進行操作
//建立陣列物件
NSMutableArray *arr1 = [[NSMutableArray alloc] initWithObjects:@"aa",@"bb",@"cc",@"vbvh"@"jd",@"jhsfcu",@"dfdh", nil];
1.addObject:
Inserts a given object at the end of the array.
- (void)addObject:(id)anObject
//1.新增元素
[arr1 addObject:@"Frank"];
NSLog(@"arr1 = %@",arr1);
2.insertObject:atIndex:
Inserts a given object into the array's contents at a given index.
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
//2.插入元素 將Duck新增到aa的後面
[arr1 insertObject:@"Duck" atIndex:1];
NSLog(@"arr1 = %@",arr1);
- removeAllObjects
Empties the array of all its elements.- (void)removeAllObjects
4.removeObjectAtIndex:
Removes the object at index . - (void)removeObjectAtIndex:(NSUInteger)index
//3.刪除元素
//1.將Duck刪除
[arr1 removeObjectAtIndex:3];
NSLog(@"arr1 = %@",arr1);
//2.刪除所有元素
// [arr1 removeAllObjects];
// NSLog(@"arr1 = %@",arr1);
- (void)removeAllObjects
5.replaceObjectsInRange:withObjectsFromArray:range:
Replaces the objects in the receiving array specified by one given range with the objects in another array specified by another range.
- (void)replaceObjectsInRange:(NSRange)aRange withObjectsFromArray:(NSArray *)otherArray range:(NSRange)otherRange
//4.替換元素
//將Frank替換成"shuaige"
[arr1 replaceObjectAtIndex:6 withObject:@"shuaige"];
NSLog(@"arr1 = %@",arr1);
6.exchangeObjectAtIndex:withObjectAtIndex:
Exchanges the objects in the array at given indices.
- (void)exchangeObjectAtIndex:(NSUInteger)idx1(下標) withObjectAtIndex:(NSUInteger)idx2(下標)
//5.交換指定的位置
[arr1 exchangeObjectAtIndex:0 withObjectAtIndex:2];
NSLog(@"arr1 = %@",arr1);
7.sortUsingSelector:
Sorts the array’s elements in ascending order, as determined by the comparison method specified by a given selector.
- (void)sortUsingSelector:(SEL)comparator
//6.對原陣列進行排序 按照ASCII碼進行排序
[arr1 sortUsingSelector:@selector(compare:)];
NSLog(@"arr1 = %@",arr1);
//7.快速遍歷
for (NSString *str5 in arr1) {
NSLog(@"%@",str5);
}
//如果陣列中元素型別不同,輸出時使用統一的泛型 id 可代表所有的物件型別.
for (id str5 in arr1) {
NSLog(@"%@",str5);
}
數值物件 NSNumber
1.numberWithChar:
Creates and returns an NSNumber object containing a given value, treating it as a signed char.
- (NSNumber *)numberWithChar:(char)value
2.charValue
Returns the receiver’s value as a char.
- (char)charValue
//將基本資料型別轉化成數值物件
//1.定義接本資料型別變數
char a = 'f';
int b = 20;
short c = 100;
long d = 1000;
float e = 12.345;
double f = 10.2222;
BOOL isTrue = YES;
//2.將基本資料型別轉換成資料物件 全部轉換成對應的數值 儲存在堆區
//相當於中介
NSNumber a1 = [NSNumber numberWithChar:a ];
NSNumber a2 = [NSNumber numberWithInt:b ];
NSNumber a3 = [NSNumber numberWithShort:c ];
NSNumber a4 = [NSNumber numberWithLong:d ];
NSNumber a5 = [NSNumber numberWithFloat:e ];
NSNumber a6 = [NSNumber numberWithDouble:f ];
NSNumber a7 = [NSNumber numberWithBool:isTrue];
NSArray arr = [NSArray arrayWithObjects:a1,a2,a3,a4,a5,a6,a7 ,nil];
NSLog(@"%@",arr);//列印陣列
//列印數值物件
NSLog(@"%@",a1);
NSLog(@"%@",a2);
NSLog(@"%@",a3);
NSLog(@"%@",a4);
NSLog(@"%@",a5);
NSLog(@"%@",a6);
NSLog(@"%@",a7);
//3.將NSNumber轉換成基本資料
char b1 = [a1 charValue];
NSLog(@"%c",b1);
int b2 = [a2 intValue];
NSLog(@"%d",b2);
//4.NSNumber型別資料的比較
NSLog(@"%ld",[a1 compare:a2]);//注意物件比較對向
上述具體結果如下:
2014-08-07 18:59:26.555 LessonNnumber[8367:303] (
102,
20,
100,
1000,
"12.345",
"10.2222",
1
)
2014-08-07 18:59:26.556 LessonNnumber[8367:303] 102
2014-08-07 18:59:26.557 LessonNnumber[8367:303] 20
2014-08-07 18:59:26.557 LessonNnumber[8367:303] 100
2014-08-07 18:59:26.558 LessonNnumber[8367:303] 1000
2014-08-07 18:59:26.558 LessonNnumber[8367:303] 12.345
2014-08-07 18:59:26.558 LessonNnumber[8367:303] 10.2222
2014-08-07 18:59:26.559 LessonNnumber[8367:303] 1
2014-08-07 18:59:26.559 LessonNnumber[8367:303] f
2014-08-07 18:59:26.559 LessonNnumber[8367:303] 20
2014-08-07 18:59:26.560 LessonNnumber[8367:303] 1
http://developer.51cto.com/art/201407/444542_1.htm
24.字典
1.字典 作用:(1)儲存多個資料 (2)用來儲存的資料具有一一對應關係(使用key和value來標識) (3)對於字典中的一對鍵值對叫做字典中的元素,也就一個條目,只要是物件就可以,不做具體的資料類型別的限制4.字典是無序的(字典中關鍵字key是唯一標示的 一個key只能對應一個value,一個value可以對應多個key)
2.建立不可變字典物件 {元素 ;號間隔}不可變的字典一旦建立就不能修改為只讀模式.
1.便利構造器的方法 這裡要注意:鍵值對是成對出現的 到nil結束
dictionaryWithObjectsAndKeys +號方法 用於建立一個物件 快速建立 Creates and returns a dictionary containing entries constructed from the specified set of values and keys.
-
(instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, , ...
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"zhgds",@"name",@20,@"hight",@12,@"age",nil];NSLog(@"%@",dic);
2.初始化物件的方法 -號方法 開闢空間 初始化物件 initWithObjectsAndKeys Initializes a newly allocated dictionary with entries constructed from the specified set of values and keys.
-
(instancetype)initWithObjectsAndKeys:(id)firstObject, , ...
NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhgds",@"name",@20,@"hight",@12,@"age",nil];
NSLog(@"%@",dic1);
3.求字典中元素的個數 count Returns the number of entries in the dictionary.
- (NSUInteger)count
NSLog(@"%lu",[dic count]);
4.獲取字典中所有key Returns a new array containing the dictionary’s keys. - (NSArray *)allKeys 注意返回值為一個陣列
NSArray *keys = [dic allKeys];
NSLog(@"%@",keys);
5.objectForKey 根據key獲取對應的value 根據物件取值 型別一定要匹配
NSString name = [dic objectForKey:@"name"];
NSLog(@"%@",name);
NSNumber age = [dic objectForKey:@"age"];
NSLog(@"%@",age);
NSNumber *hight = [dic objectForKey:@"hight"];
NSLog(@"%@",hight);
- 快速遍歷 對於陣列來說遍歷到的是陣列中的元素 對於字典來時遍歷到的是key 一個key對應一個value 但value可以對應多個key
for (NSString *k in dic) {
//檢索到key之後獲取對應的value.
NSLog(@"%@",[dic objectForKey:k]);
}
7.建立可變字典物件 NSMutableDictionary
1.建立物件的兩種方式 便利構造器和初始化
NSMutableDictionary dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoguang",@"guanggun1",@"xiaoshuai",@"guanggun2",@"xiaomeng",@"guanggun3", nil];
NSLog(@"%@",dic);
NSMutableDictionary dic1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"xiaoguang",@"guanggun1",@"xiaoshuai",@"guanggun2",@"xiaomeng",@"guanggun3", nil];
NSLog(@"%@",dic1);
2.求字典元素個數 同樣是 count 返回值是一個整形的數
NSLog(@"%lu",[dic count]);
3.刪除元素 removeObjectForKey removeAllObjects
[dic removeObjectForKey:@"guanggun1"];
NSLog(@"%@",dic);
[dic removeAllObjects];
NSLog(@"%@",dic);
4.新增元素 setObject需要特別注意 這裡用的是set方法
[dic setObject:@"chengjie" forKey:@"guanggun1"];
NSLog(@"%@",dic);
5.修改key對應的value
[dic setObject:@"xiaocun" forKey:@"guanggun1"];
NSLog(@"%@",dic);
setObject:forKey:工作原理:根據指定key查詢字典中是否存在相同的,若果存在則修改對應的value ,若果不存在,在字典中新增一個元素key-value鍵值對.
6.快速遍歷 對於陣列來說遍歷到的是陣列中的元素 對於字典來時遍歷到的是key 一個key對應一個value 但value可以對應多個key
for (NSString *k in dic) {
//檢索到key之後獲取對應的value.
NSLog(@"%@",[dic objectForKey:k]);
}
25.集 集合類 NSSet 不可變集合
1.建立集合物件 兩種方法 便利構造器 初始化方法 輸出規範 {(元素,號間隔)} setWithObjects initWithObjects
NSSet set1 = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSLog(@"%@",set1);
NSSet set = [[NSSet alloc] initWithObjects:@"1dghdaj",@"2",@"3hsdflds",@"4",@"5",@"6", nil];
NSLog(@"%@",set);
2.獲取元素個數 count
NSLog(@"%lu",[set count]);
3.獲取集合的某個元素
NSString *str = [set anyObject];
NSLog(@"%@",str);
NSString *str1 = [set anyObject];
NSLog(@"%@",str1);
NSString *str2 = [set anyObject];
NSLog(@"%@",str2);
NSString *str3 = [set anyObject];
NSLog(@"%@",str3);
獲取原則 :怎麼方便怎麼獲取 可能是隨機 但以上三種輸出結果都一樣 也不是隨機 具體理解請參考API文件
4.判斷集合中是否包含某個元素 containsObject
BOOL isExist = [set containsObject:@"2"];
NSLog(@"isExist = %d",isExist);
5.可變集合 建立物件兩種方式 便利構造器 初始化
1.便利構造器 setWithObjects
NSMutableSet *set1 = [NSMutableSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSLog(@"%@",set1);
2.初始化方法
NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSLog(@"%@",set1);
2.新增元素到集合中 利用 addObject:新增物件
[set1 addObject:@"6"];
NSLog(@"%@",set1);
3.移除集合中的物件的方法 removeObject
[set1 removeObject:@"5"];
NSLog(@"%@",set1);
26.排序高階
針對物件的不同屬性的例項方法進行排序
1.main.m檔案裡
int main(int argc, const char argv[])
{
@autoreleasepool {
//建立四個物件
Person xiaoli = [[Person alloc]initWithName:@"xiaoli" age:18 height:172];
Person zhangsan = [[Person alloc] initWithName:@"zhangsan" age:20 height:175];
Person lisi = [[Person alloc] initWithName:@"lisi" age:21 height:168];
Person wangwu = [[Person alloc] initWithName:@"wangwu" age:24 height:182];
//將物件存入陣列中.
NSArray arr = [NSArray arrayWithObjects:xiaoli,zhangsan,lisi,wangwu, nil];
//sortedArrayUsingSelector適用於升序排序以及系統自定義的類進行排序
//對陣列物件按姓名升序排列
NSArray sortArrName =[arr sortedArrayUsingSelector:@selector(compareByName:)];
NSLog(@"%@",sortArrName);
//對陣列物件按年齡升序排列
NSArray sortarrage = [arr sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@",sortarrage);
//對陣列物件按身高升序排列
NSArray sortarrheight = [arr sortedArrayUsingSelector:@selector(compareByHeight:)];
NSLog(@"%@",sortarrheight);
//對陣列物件按姓名降序排列
NSArray sortarrnameDesecending =[arr sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@",sortarrnameDesecending);
//對字串陣列進行排序
//block的排序方式適用於陣列中的物件是系統型別時 並且是降序排列時
NSArray arr1 = [[NSArray alloc] initWithObjects:@"aa",@"bb",@"cc",@"dd",@"ee",@"ff", nil];
//1.對陣列進行升序排序
NSArray sortArrAscending = [arr1 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",sortArrAscending);
//1.對陣列進行降序排序
NSString sortArrDescending =[arr1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//對block匿名函式實現,比較方法
//將id 轉為NSString型別
NSString str1 = (NSString )obj1;
NSString str2 = (NSString *)obj2;
//2.字串比較
return -[str1 compare:str2];
}];
NSLog(@"%@",sortArrDescending);
}
return 0;
}
Person.h檔案裡
@interface Person : NSObject
{
NSString *_name;// 姓名
NSInteger _age;//年齡
CGFloat _height;//身
}
//設定名字
- (void)setName:(NSString *)name;
//訪問名字 - (NSString *)getName;
//設定年齡 - (void)setAge:(NSInteger)age;
//訪問年齡 - (NSInteger)getAge;
- (void)setHeight:(CGFloat)height;
- (CGFloat)getHeight;
//初始化方法 - (id)description;
//定義初始化方法 - (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
//新增比較方法 compare NSComparisonResult列舉結果 - (NSComparisonResult)compareByAge:(Person *)anotherPerson;
- (NSComparisonResult)compareByHeight:(Person *)anotherPerson;
- (NSComparisonResult)compareByName:(Person *)anotherPerson;
- (NSComparisonResult)compareByNameDesecending:(Person *)anotherPerson;
@end
Person .m 檔案裡
@implementation Person
//設定名字
- (void)setName:(NSString *)name{
_name = name;
}
//訪問名字 - (NSString *)getName{
return _name;
}
//設定年齡 - (void)setAge:(NSInteger)age{
_age = age;
}
//訪問年齡 - (NSInteger)getAge{
return _age;
} - (void)setHeight:(CGFloat)height{
_height = height;
} - (CGFloat)getHeight{
return _height;
} - (id)description{
return [NSString stringWithFormat:@"name:%@,age:%ld,height:%g",_name,_age,_height];
} - (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height{
self = [super init];
if (self) {
_name = name;
_age = age;
_height =height;
}
return self;
}//新增比較方法 compare NSComparisonResult列舉結果
//比較年齡 - (NSComparisonResult)compareByAge:(Person *)anotherPerson{
if ([self getAge] > [anotherPerson getAge]) {
return NSOrderedDescending;//對應的是 1
} else if ([self getAge] == [anotherPerson getAge]){
return NSOrderedSame;//對應的是 0
} else {
return NSOrderedAscending;//對應的是 -1
}
}
//比較身高 - (NSComparisonResult)compareByHeight:(Person *)anotherPerson{
if ([self getHeight] > [anotherPerson getHeight]) {
return NSOrderedDescending;//對應的是 1
} else if ([self getHeight] == [anotherPerson getHeight]){
return NSOrderedSame;//對應的是 0
} else {
return NSOrderedAscending;//對應的是 -1
}
} - (NSComparisonResult)compareByName:(Person *)anotherPerson{
return [[self getName] compare:[anotherPerson getName]];
} - (NSComparisonResult)compareByNameDesecending:(Person *)anotherPerson{
return - [[self getName] compare:[anotherPerson getName]];
}
@end
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4729/viewspace-2800062/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OC UIApplication基礎知識整理UIAPP
- iOS | 面試知識整理 - OC基礎 (一)iOS面試
- OC UIViewController基礎知識整理UIViewController
- OC中常見基礎知識點彙整
- OC UIImage基礎UI
- OC UIView基礎UIView
- rac基礎知識溫習(1)
- go語言學習-基礎知識Go
- c語言基礎知識C語言
- OC基礎-(四)KVC、KVO
- 組合語言-基礎知識組合語言
- c語言基礎知識3C語言
- R語言學習筆記:基礎知識R語言筆記
- OC基礎學習-NSString、NSArray和NSDictionary
- Go語言:包管理基礎知識Go
- Go 基礎教程--2-基礎知識Go
- OC基礎(六)——記憶體管理記憶體
- 收藏: 全面解析FPGA基礎知識FPGA
- HTML基礎知識(轉)HTML
- Python 基礎知識教程Python
- Linux下C語言程式設計基礎知識(轉)LinuxC語言程式設計
- 執行緒的基礎知識(轉載)執行緒
- 負載均衡基礎知識負載
- Go語言核心36講(Go語言基礎知識一)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識二)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識三)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識四)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識五)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識六)--學習筆記Go筆記
- NLP漢語自然語言處理入門基礎知識自然語言處理
- 【ASM學習】基礎知識ASM
- [轉]Linux基礎知識Linux
- 交換機基礎知識(轉)
- korn shell基礎知識(轉)
- 基礎知識
- java語言基礎學習Java
- c語言基礎學習C語言
- 【全面】Linux基礎知識和基本操作語句大全(一)Linux