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