【轉載】oc語言基礎知識全面 看完oc基礎教程後再溫習一遍

youou發表於2021-09-09

OC部分
第一部分 基本概念
OC概述

OC是一種能夠完成複雜物件導向程式設計的簡單的計算機設計語言。
透過提供用於定義類和方法的語法,它擴充套件了標準的c語言。它還提供了類和介面(任何類採用)的動態擴充套件。
物件導向程式設計

  1. 物件導向 和 程式導向
    物件導向 OOP(Object Oriented Programming) 分解問題組成的物件 協調物件間的聯絡和通訊 解決問題. 以物件為中心 也就是引數事件的參與者,設計物件的功能完成事件只是事物所有功能中的一小部分.
    程式導向 POP (Procedure Oriented Programming) 分析解決問題的步驟 實現函式 依次呼叫. 事件為中心 關心該事件的詳細步驟 一步一步如何完成實現.
    類和物件

  2. 類 只允許單繼承 一個類只允許一個父類 沒有父類的類稱為根類 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檔案管理類的實現部分、
檔案和類本質沒有關係。為了方便管理實現封裝性。

  1. 建立物件
    建立物件分兩步:分配記憶體空間和初始化
    分配記憶體空間:根據類中宣告的例項變數為物件分配記憶體,將所有的例項變數置為預設值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(訊息)];

  1. 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位雙字
  2. 類和物件

    • 對於物件 +對於類
      (id) 類似於C語言中的(void *) 泛指指標的返回地址
  3. 例項變數可見度 (瞭解)
    public 公共的共有的 例項變數可以在類的外部和內部操作 訪問方式可以透過 :物件 + 指向運算子 + 例項變數 例如: p->name;

protected 受保護的 預設的 例項變數只能在該本類和子類內部操作

private 私有的 例項物件只能在該類內訪問,不可以在子類檔案以及其他檔案中訪問.

例項變數定義在.h中 相當於先宣告某一變數是某一型別的例項變數. 不設定可見度的時候,為預設的 受保護的 protected 定義方式
為什麼不宣告為@public :1. 外部就可以訪問內部以及修改,會影響內部的一個實現,提供外不訪問的介面.2.違背了OC三大物件導向的思想——封裝 隱藏內部實現,提供外界訪問的藉口.
為什麼不宣告為@private :1.子檔案訪問不到,子檔案還需另外宣告.2.違背oc的繼承父類有 子類就可以用

@public //單獨
NSString name;//姓名
@private
NSString
gender;//性別
@protected
NSInteger age;//年齡

  1. 類的定義
    介面部分和檔案實現部分可以寫在main.m裡 但需要寫在main函式的外面 相當於函式的宣告和實現
    一個檔案裡可以有很多個類 只要符合 介面檔案的宣告和實現的框架就可以 和檔名沒有關係 一般情況下 一個檔案中就定義一個類 類的名字和檔案同名
    //.m裡
    @implementation aa
    @end
    //.h裡
    @interface aa : NSObject
    {
    NSString name;
    NSString
    sex;
    }
    @end

  2. 方法
    工程 所有單詞的首字母都要大寫
    方法 第一個不大寫 以後所有的首字母都大寫
    //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);
}

  1. 字串擷取 從給定下表到結束 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 利用便利構造器方法

    1. arrayWithObjects:
      Creates and returns an array containing the objects in the argument list.
      建立並返回包含在引數列表中的物件的陣列。
  • (instancetype)arrayWithObjects:(id)firstObj,,…
  1. 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)
  1. count:
    Returns the number of objects currently in the array.
    返回當前陣列的物件的數量。
  • (NSUInteger)count
    獲取元素個數
    NSUInteger count = [arr2 count];
    NSLog(@"count = %lu",count); //count = 3;
  1. objectAtIndex:透過下標取元素
    Returns the object at the specified index of the set.
    返回集合的指定索引處的物件。
  • (id)objectAtIndex:(NSUInteger)index
  1. firstObject:
    Returns the first object in the array.
    返回的陣列中的第一個物件。
  • (id)firstObject
  1. 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
  1. 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
  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);

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);
  1. 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);

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);

  1. 快速遍歷 對於陣列來說遍歷到的是陣列中的元素 對於字典來時遍歷到的是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檔案裡

import
import "Person.h"

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檔案裡

import

@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 檔案裡

import "Person.h"

@implementation Person

pragma mark - setter and getter

//設定名字

  • (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;
    }
    pragma mark - override method
  • (id)description{
    return [NSString stringWithFormat:@"name:%@,age:%ld,height:%g",_name,_age,_height];
    }
    pragma mark - init method
  • (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height{
    self = [super init];
    if (self) {
    _name = name;
    _age = age;
    _height =height;
    }
    return self;
    }
    pragma mark - compare method

    //新增比較方法 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章