日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC之NSArray/NSMutableArrray

發布時間:2025/7/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC之NSArray/NSMutableArrray 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Objective-C中除了可以使用C中的基本數組外,int[5],char word[] ={a,b,c};Foundation還提供了NSArray類,其有如下特點:。

(1)NSArray是有序的對象集合。

(2)NSArray保存的對象可以是不同的對象。

(3)int ,char,double等基本數據類型不能直接保存,需要通過轉換成對象才能加入數組。

例如下面的代碼在運行時會報錯:

NSArray *arrs = [[NSArray alloc]initWithObjects:@”abc”,@”123”,456,nil];

就像NSStringNSMutableString一樣,同樣也存在可變數組和不可變數組.不可變數組是由NSArray類處理的,而可變數組則是由NSMutableArrray處理的.后者是前者的子類,也就是說NSMutableArrray繼承了NSArray的方法.

NSArray?不可變數組

使用NSArray關鍵字創建一個不可變的數組,一旦初始化完畢后這個數組的元素是不可以在動態的添加與刪除。例如:

int main(int argc, const char * argv[])

{

????@autoreleasepool?{

?

????????//創建一個包含星期的數組

??????? NSArray *days = [NSArray arrayWithObjects:@"SUN",

@"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT", nil];

?

????????//獲取數組所包含對象個數

??????? NSLog(@"size of days:%ld",(unsigned long)[days count]);??//size of days:7

?

????????//循環打印數組中的元素,比較普遍,但效率不高

??????? for (int i=0; i<[days count]; i++) {

??????????? NSLog(@"%@",[days objectAtIndex:i]);

??????? }

?

????????//另一種方法打印數組中的元素,效率高,推薦使用

??????? for(id day in days){

??????????? NSLog(@"%@",day);

??????? }

??? }

??? return 0;

}

對于數組創建,編譯器為了減少代碼量,提供了更簡便方法,比如:

NSArray *days = [NSArray arrayWithObjects:@"SUN",

@"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT", nil];

等價于:

NSArray *days =

@[@"SUN","MON","TUE","WED","THU","FRI","SAT"];

創建多維NSArray:

NSArray *days = @{

@{@”sum,@”mon”,@”tue”,@”wed”},

@{@”sum,@”mon”,@”tue”,@”fri”}

@{@”fri,@”mon”,@”tue”,@”sat”}

@{@”sat,@”mon”,@”tue”,@”wed”}

}

NSArray的類方法arrayWithObjects:使用一列對象作為元素創建數組,這種情況下需要按順序列出對象并使用逗號隔開。將這個數組的最后一個值指定為nil,標記參數數組的結束.它實際上并不會存儲在數組中.

[array count]?:?得到這個數組對象的長度。

[array objectAtIndex index]:?傳入數組的索引(index)?得到數據對象。

[arrayWithObjects:?]?:向數組對象初始化賦值。這里可以寫任意對象的指針,結尾必須使用nil,以標志結束.

+(id)arrayWithObjects:obj1,obj2,nil?創建一個新的數組,obj1,obj2……是他的元素對象,以nil對象結尾

-(BOOL)containsObject:obj?確定數組中是否包含對象obj

-(NSUInteger)count?返回數組元素個數

-(NSUInteger)indexOfObject:obj?第一個包含obj元素的索引號

-(id)objectAtIndex;i?返回存儲在位置?i?的對象

-(void)makeObjectsPerformSelector:(SEL)selector??selector?只是的消息發送給數組中的每個元素

-(NSArray*)sortedArrayUsingSelector:(SEL)selector?根據selector?指示的比較方法對數組進行排序,比如:

NSArray * array = @[@"b",@"d",@"a",@"z"];

array = [array sortedArrayUsingSelector:@selector(compare:)];

NSLog(@"排序后?array %@",array);

?

-(BOOL)writeToFile:path atomically:(BOOL)flag?將數組寫入指定的文件中,如果flag??YES,則需要先創建一個臨時文件

MSMutableArray可變數組

大多時候我們需要動態的增加和刪除數組中的元素,這就需要使用MSMutableArray。例如:

int main(int argc, const char * argv[])

{

?

??? @autoreleasepool {

???????//創建一個空數組

?????? NSMutableArray *arrs = [NSMutableArray array];

?

????????//C中的一些基本元素我們可以用NSNumber類來包裝,類似java中的裝箱,另外還有一些struct類型的數據我們也可以用NSNumber類的父類NSValue來進行包裝,包裝成NSValue的對象再將其放入數組中。

??????? int age=23;

??????? char c='a';

??????? float f=3.1415926;

??????? NSRect rect =NSMakeRect(1, 2, 3, 4);

?

??????? NSNumber *objAge = [NSNumber numberWithInt:age];

??????? NSNumber *objC =[NSNumber numberWithChar:c];

??????? NSNumber *objF =[NSNumber numberWithFloat:f];

??????? NSValue *objRect = [NSValue valueWithRect:rect];

?

??????? [arrs addObject:objAge];

??????? [arrs addObject:objC];

??????? [arrs addObject:objF];

??????? [arrs addObject:objRect];

?

????????//如果要添加空的話可以用以下方法

??????? [arrs addObject:[NSNull null]];

?

??????? NSLog(@"Size of arrs: %li",(unsigned long)[arrs count]);?//Size of arrs: 5

??????? NSLog(@"%@",arrs);

?

????????//創建一個指定初始容量的數組

??????? NSMutableArray *arrs2 =

[NSMutableArray arrayWithCapacity:3];

?

????????//指定初始容量為3,但我們添加了5個對象

??????? [arrs2 addObject:@"obj1"];

??????? [arrs2 addObject:@"obj2"];

??????? [arrs2 addObject:@"obj3"];

??????? [arrs2 addObject:@"obj4"];

??????? [arrs2 addObject:@"obj5"];

?

????????//將對象?obj?插入到索引為?i?的位置

??????? [arrs2 insertObject:@"obj" atIndex:0];

?

????????//刪除指定索引處的對象

??????? [arrs2 removeObjectAtIndex:3];

?

????????//遍歷數組

??????? for(id obj in arrs2){

??????????? NSLog(@"%@",obj);????//obj,obj1,obj2,obj4,obj5

??????? }

?

????????//合并字符串數組

??????? NSString *str = [arrs2 componentsJoinedByString:@"|"];

??????? NSLog(@"%@",str);??//obj|obj1|obj2|obj4|obj5

?

????????//字符串切割成數組

????????NSArray *arr3=[str componentsSeparatedByString:@"|"];

??????? NSLog(@"%@",arr3);

?

??? }

??? return 0;

}

?

NSMutableArray類常用方法

array?創建一個空數組

+(id)arrayWithCapacity:size?創建一個數組,指定容量為size

-(id)initWithCapacity:size?初始化一個新分配的數組,指定容量為size

-(void)addObject:obj?將對象obj添加到數組末尾

-(void)insertObject:obj atIndex:i?將對象?obj?插入到索引為?i?的位置

-(void)replaceObject:obj atIndex:i?將數組中索引為?i?處的元素用obj?置換

-(void)removeObject:obj?從數組中刪除所有是?obj?的對象

-(void)removeObjectAtIndex:i?從數組中刪除索引為?i?的對像

-(void)sortUsingSelector:(SEL)selector??selector?只是的比較方法將數組排序


總結

以上是生活随笔為你收集整理的OC之NSArray/NSMutableArrray的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。