//從plist文件中讀取數(shù)據(jù)
10多年的鳳凰網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整鳳凰建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“鳳凰網(wǎng)站設(shè)計”,“鳳凰網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
- (void)readDataFromPlist
{
//1.先獲取文件路徑
NSString * filePath = [[NSBundle mainBundle] pathForResource:@"Book" ofType:@"plist"];
//2.根據(jù)路徑初始化字典對象
self.dic = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
//將不可邊字典變成可變字典
self.addressBook = [NSMutableDictionary dictionaryWithDictionary:_dic];
//將字典封裝成對象
//(1)從字典中遍歷出key
for (NSString * key in self.dic) {
//根據(jù)key獲取對應(yīng)的數(shù)組
NSArray * groupArr =self.dic[key];
//(5) 創(chuàng)建可變的小數(shù)組,存儲封裝的對象
NSMutableArray * newGroupArr = [NSMutableArray array];
//(3)獲取小數(shù)組中元素(遍歷小數(shù)組)
for (NSDictionary * groupDic in groupArr) {
//(4)通過字典初始化AddressPerson
AddressPerson * Person = [[AddressPerson alloc]initWithDic:groupDic];
[newGroupArr addObject:Person];//將對象存儲到新的可變數(shù)組中
RELEASE_SAFE(Person);
}
//將要原來key對應(yīng)的存儲字典的小數(shù)組替換成裝有對象的心得可變的數(shù)組
[self.addressBook setObject:newGroupArr forKey:key];
}
//取出字典中所有的key
self.orderedKeys= [[self.addressBook allKeys]sortedArrayUsingSelector:@selector(compare:)];
// NSLog(@"%@",addressBook);
}
不管是NSArray,還是NSMutableArray ,alloc之后的得到都是__NSPlacrholderArray.
當(dāng)我們nsarray一個空數(shù)組,得到的是__NSArray0
nsarray只有一個元素時,得到的是__NSSingleObjectArrayI
nsarray.count 1 時, 得到 __NSArrayI
nsmutablearray 返回的都是__NSArrayM
placeHolder 和 placeHoldes 的內(nèi)存地址一樣,說明是一個單例,該類內(nèi)部只有一個isa指針,init后被新的實例換掉了
CFArray 是CoreFoundation中的, 和Foundation中的NSArray相對應(yīng),他們是Toll-Free-Briaged. 用的環(huán)形緩沖區(qū)實現(xiàn)的.
C數(shù)組的原理 連續(xù)的內(nèi)存空間, 在下標(biāo)0處插入一個元素時, 移動其后面所有的元素, 即memmove原理
同樣的移除第一個元素,需要進行相同的動作
環(huán)形緩沖區(qū),在刪除的時候不會清楚指針, 如果我們在中間進行插入和刪除, 只會移動最少的一邊元素.
__NSArrayI{
NSInterger _userd; 數(shù)組的元素個數(shù),調(diào)用[array count]時,返回的就是_userd的值。
id_list[0]; 當(dāng)做id_list來用,即一個存儲id對象的buff.由于__NSArrayI的不可變,所以_list一旦分配,釋放之前都不會再有移動刪除操作了。
}
從實現(xiàn)來看,如果_list還沒有構(gòu)成循環(huán),第一次就獲得了全部元素,跟__NSArrayI一樣。但是如果_list構(gòu)成了玄幻,就需要兩次,第一次獲取_offset到_list末端的元素,第二次獲取存放在_list起始處的剩余元素。
__NSArrayM的_list是個循環(huán)數(shù)組,它的其實由_offset標(biāo)識.
forin速度最快的原因是遵從了NSFastEnumertation協(xié)議,它是直接從C數(shù)組中去對象對于可變數(shù)組來說,最多只需要兩次就可以獲取全部數(shù)據(jù)。如果數(shù)組沒有構(gòu)成循環(huán),第一次就獲得了全部元素,跟不可變數(shù)組一樣,如果數(shù)組構(gòu)成了循環(huán),那么就需要兩次,第一次獲取對象數(shù)組的起始偏移到循環(huán)數(shù)組末端的元素,第二次獲取存放在循環(huán)數(shù)組起始處的剩余元素。而for循環(huán)之所以慢一點,是每次都要調(diào)用objectAtIndex:,添加@autoreleasepool,可以提高效率,如果我們每次遍歷不需要知道下標(biāo),選擇forin。
NSEnumerationConcurrent+Block的方式耗時最大,我認(rèn)為是因為它采用多線程,就這個方法來講,多線程的優(yōu)勢并不在遍歷多快,它的回調(diào)在各個子線程。
1.使用普通的for循環(huán)
NSArray *ary = @[@"我",@"是",@"張",@"小",@"倍",@"er"];
for (int i = 0; i ary.count; i ++) {
NSLog(@"%@",[ary objectAtIndex:i]);
}
2.使用for in 進行遍歷
NSArray *ary = @[@"我",@"是",@"張",@"小",@"倍",@"er"];
for (NSString *str in ary) {
NSLog(@"%@",str);
}
3.使用do while
NSArray *ary = @[@"我",@"是",@"張",@"小",@"倍",@"er"];
int i = 0;
do {
NSLog(@"%@",[ary objectAtIndex:i]);
i ++;
} while (i ary.count);
}
4.使用while do?
NSArray *ary = @[@"我",@"是",@"張",@"小",@"倍",@"er"];
int i = 0;
while (i ary.count) {
NSLog(@"%@",[ary objectAtIndex:i]);
i ++;
}
5.使用快速枚舉
NSArray *ary = @[@"我",@"是",@"張",@"小",@"倍",@"er"];
[ary enumerateObjectsUsingBlock:^(id? _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%ld,%@,%@",idx ,[ary objectAtIndex:idx],obj);
}];
6.
NSArray *ary = @[@"我",@"是",@"張",@"小",@"倍",@"er"];
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply([ary count],queue, ^(size_t index){
NSLog(@"%ld,%@",index,[ary objectAtIndex:index]);
});
數(shù)組是固定的哦,不能動態(tài)添加。需要動態(tài)添加的話請 改用 集合方式。 然后操作完成后再把集合轉(zhuǎn)換成數(shù)組。
這個還是要看你的需要。如果這個數(shù)組需要在初始時有初始數(shù)據(jù),這樣你在初始時可以使用字面量或init方式來創(chuàng)建實例。如果不需要一開始就初始,也可以如這樣的代碼
NSArray *array = nil;
后面的邏輯中得到數(shù)據(jù)后再賦值
array = xxxx;
在ios開發(fā)的過程中,經(jīng)常需要使數(shù)組中的數(shù)據(jù)倒敘排列!比如在tableView顯示數(shù)據(jù)的時候需要使數(shù)據(jù)倒序排列!那么如何解決數(shù)組的倒序排列問題呢?好多開發(fā)的小伙伴可能是便利數(shù)組的下標(biāo)來獲取,但是這種方法如果數(shù)據(jù)很大的情況下程序體驗度會降低 , 這里介紹一個方法,一句話便可以搞定數(shù)組的倒序排序問題!
sortedArrayUsingSelector
按Key值大小對NSDictionary排序
sortedArrayUsingSelector
sortedArrayUsingComparator
sortedArrayUsingDescriptors sortUsingDescriptors
前者帶返回值,是NSArray的方法,排好序的數(shù)組是返回值中的數(shù)組;
后者不帶返回值,是NSMutableArray的方法,是對當(dāng)前數(shù)組自己排序
接下來根據(jù)一個對象的屬性,排列這個對象
.h
.m
排序方法的實現(xiàn)
這里的NSArray中的第一元素表示首先按照這個元素的升序或者降序進行排序,對于有重復(fù)項的,再按照第二元素進行排序,依次進行類推
轉(zhuǎn)自:
文章名稱:ios開發(fā)數(shù)組,ios 數(shù)組分組
鏈接地址:http://chinadenli.net/article38/dsiehsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、、手機網(wǎng)站建設(shè)、網(wǎng)站營銷、自適應(yīng)網(wǎng)站、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)