亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS階段學習第16天筆記(Category-NSSet-SEL-NSIndexSet操作)

2019-11-14 18:44:30
字體:
來源:轉載
供稿:網友

iOS學習(OC語言)知識點整理

 


一、NSSet、NSMutableSet集合的介紹

 

1)NSSet、NSMutableSet集合,元素是無序的,不能有重復的值。

 

2)用實例方法創建一個不可變集合對象 例如:  

1 //宏定義2 #define TOBJ(n) [NSNumber numberWithInt:n]3 NSSet *set1=[[NSSet alloc]initWithObjects:TOBJ(2),TOBJ(3),TOBJ(3),TOBJ(1),TOBJ(5), nil];

 

2)用類方法創建一個不可變集合對象 例如: 

1 NSSet *set2=[NSSet setWithObjects:TOBJ(2),TOBJ(4),TOBJ(6), nil];

  

3)NSSet 快速遍歷方法(無序,所以沒有下標)例如: 

1  for(id num in set1){2     NSLog(@"%@",num);3 } 

  

4)setSet 用于修改集合內容 例如:[mSet setSet:set1];


5)intersectSet 用于獲取兩個集合的交集(返回兩個集合中相同的元素)。例如: 

1 #define TOBJ(n) [NSNumber numberWithInt:n]2 NSSet *set1=[[NSSet alloc]initWithObjects:TOBJ(2),TOBJ(3),TOBJ(3),TOBJ(1),TOBJ(5), nil];3 NSSet *set2=[NSSet setWithObjects:TOBJ(2),TOBJ(4),TOBJ(6), nil];4 [mSet intersectSet:set2];5 NSLog(@"intersect:%@",mSet); //結果:2

  

6)unionSet 用于獲取兩個集合的并集(返回兩個集合中所有的元素,如果重復只顯示其中一個) 例如: 

1 #define TOBJ(n) [NSNumber numberWithInt:n]2 NSSet *set1=[[NSSet alloc]initWithObjects:TOBJ(2),TOBJ(3),TOBJ(3),TOBJ(1),TOBJ(5), nil];3 NSSet *set2=[NSSet setWithObjects:TOBJ(2),TOBJ(4),TOBJ(6), nil];4 [mSet intersectSet:set2];5 NSLog(@"intersect:%@",mSet); //結果:123456

  

7)minusSet 用于獲取兩個集合的差集 例如: 

1 #define TOBJ(n) [NSNumber numberWithInt:n]2 NSSet * mSet =[[NSSet alloc]initWithObjects:TOBJ(2),TOBJ(3),TOBJ(3),TOBJ(1),TOBJ(5), nil];3 NSSet *set2=[NSSet setWithObjects:TOBJ(2),TOBJ(4),TOBJ(6), nil];4 [mSet minusSet:set2];5 NSLog(@"intersect:%@",mSet); //結果:13456

  

8)allObjects 用于將集合轉換為數組 例如: 

1 #define TOBJ(n) [NSNumber numberWithInt:n]2 NSSet * mSet =[[NSSet alloc]initWithObjects:TOBJ(2),TOBJ(3),TOBJ(3),TOBJ(1),TOBJ(5), nil];3 NSArray *array= [mSet allObjects];

  

9)anyObject 取set中任意一個元素(如果set中只有一個元素,取值) 

1 #define TOBJ(n) [NSNumber numberWithInt:n]2 NSSet * mSet =[[NSSet alloc]initWithObjects:TOBJ(2),TOBJ(3),TOBJ(3),TOBJ(1),TOBJ(5), nil];3 id value=[mSet anyObject];

  

二、NSIndexSet、NSMutableIndexSet 可變索引集合的介紹


1)索引集合,表示唯一的整數的集合,有可變和不可變之分。


2)initWithIndexesInRange 用指定的范圍對應的索引創建索引對象 例如: 

1 NSIndexSet *indexSet1=[[NSIndexSet alloc]initWithIndexesInRange:2 NSMakeRange(2,   3)];//結果 2,3,4

  

3)objectsAtIndexes 根據索引集合中的索引取出數組中對應的元素(返回數組) 例如: 

1 NSIndexSet *indexSet1=[[NSIndexSet alloc]initWithIndexesInRange:NSMakeRange(2,   3)]; 2 NSArray *array=@[@"one",@"two",@"three",@"four",@"five",@"sex"];3 NSArray *array2=[array objectsAtIndexes:indexSet1];4 NSLog(@"array2:%@",array2); //結果:array2:three four five

  

4)創建一個可變的集合索引(初始化時有一個索引)(可以存儲不連續的索引值) 例如: 

1 NSMutableIndexSet *indexSet2=[NSMutableIndexSet indexSetWithIndex:2];2 [indexSet2 addIndex:4];3 [indexSet2 addIndex:1];4 [indexSet2 addIndex:2];5 NSLog(@"count:%ld",indexSet2.count);//獲取個數6 NSArray *array3=[array objectsAtIndexes:indexSet2];//結果:two three  five

  

5)NSNull:類表示空, 只有一個類方法[NSNull null]獲取空對象,在數組中nil表示元素結束(不能用nil表示空元素

      可采用[NSNull null]表示空元素) 例如: 

1 NSArray *array5=[NSArray arrayWithObjects:@"red",[NSNull null],@"yellow",@"blue", nil];

  

三、Category 介紹


1)Category 意為: 類別、分類、類目

 

 1、可以在不改變類名的情況下,擴充類的功能(給類增加方法)

 

 2、可以將類的功能拆成多個文件編譯

 

 3、類別中不能增加成員變量,可以訪問原來類中的成員變量

 

 4、類別中可以增加與原來類中同名的方法,調用時優先調用

 

 5、添加文件時選擇Objective-C File 那個文件同時注意選擇要拓展的類名


2)類別的聲明類似于類的聲明,@interface要擴充功能的類名(類別名)

 

     1、類別不能實例化對象 

 

     2、類別中不能增加成員變量。

 

     3、類別中的方法可以訪問原來類中的成員變量

 

     4、類別可以調用原來類中的方法

 

     5、類別中的方法可以被子類繼承

 

     6、類別可以添加與原來類中相同的方法,調用時類別中的方法優先調用,一般不建議這樣操作(無法再調用原來類中的方法)


3)字符串、NSNumber是簇類,底層是由很多類組成的,不能有子類 ,因為子類調用不了父類中的方法


4)Category 文件名格式為:父類文件名+子類文件名 如:NSMutaleString+Resvrse.h


5)Category .m文件中的方法表現形式:  1 @implementation NSMutableString (Reverse)  


四、Extension 的介紹


1)extension:相當于未命名的Category,可以擴展類的功能(增加方法),也可以增加成員變量。


2)extension:只有.h文件


3)extension  表現形式 @interface 類名()例如: 1 @interface Person (){} 


4)在.m文件中也可以聲明成員變量,不會將其放在接口h文件中暴露給使用者。 例如:  

1 @interface Person()2 { 3     int _num;4 }5 //將方法聲明為私有的6 -(void)PRint2;7 @end

 

五、SEL的介紹


1)SEL是一種類型,將方法名封裝為sel的變量,通過SEL找到方法的地址,調用方法。


2)SEL 封裝方法實例代碼: 

1  //將play方法名封裝成SEL類型的數據2 SEL sel=@selector(play);3  //判斷p1所屬的類是否實現了sel中的方法4 if([p1 respondsToSelector:sel]){5  //p1查找sel中方法的地址,再調用對應的方法6 [p1 performSelector:sel];7  }

 

3)使用SEL 方法實現數組排序 實例代碼:

 

1、創建一個Student類 .h文件中的代碼如下:

 1 #import <Foundation/Foundation.h> 2  @interface Student : NSObject {    3     NSString *_name;    4     int _age;     5     int _score; 6 } 7  8 -(void)setName:(NSString*)name; 9 -(NSString *)name;10 -(void)setAge:(int)age;-(int)age;11 -(void)setScore:(int)score;-(int)score;12 -(NSComparisonResult)compareStudent:(Student *)s2;13 +(Student *)studentWithName:(NSString *)n andAge:(int)a andScore:(int)s;14 -(void)print;15 @end

 

2、.m文件中的代碼實現

 

 1 #import "Student.h"  2 @implementation Student 3 -(void)setName:(NSString*)name{   4   if(name!=_name){       5   [_name release];         6 _name=[name retain]; 7  } 8 } 9 -(NSString *)name{    return _name;}10 -(void)setAge:(int)age{ 11    _age=age;12 }13 -(int)age{    14 return _age;15 }16 -(void)setScore:(int)score{  17   _score=score;18 }19 -(int)score{20     return _score;21 }22 +(Student *)studentWithName:(NSString *)n andAge:(int)a andScore:(int)s{  23   Student *stu=[[[Student alloc]init]autorelease];  24   stu.name=n;    25   stu.age=a;    26   stu.score=s;   27   return stu;28 }29 -(void)print{  30   NSLog(@"My Name Is %@ Age Is %d Score Is %d",_name,_age,_score);31 }32 -(NSComparisonResult)compareStudent:(Student *)s2{    if(self.score<s2.score){       33  return NSOrderedAscending;  34   }else if (self.score>s2.score){    35     return NSOrderedDescending;    36 }else{     37    if(self.age<s2.age){       38      return NSOrderedAscending;       39  }else if (self.age>s2.age){     40        return NSOrderedDescending;      41   }else{          42   return [self.name compare:s2.name];     43    }    44 }45 }46 -(void)dealloc{ 47    NSLog(@"student %@ dealloc",_name);   48  [_name release];   49  [super dealloc];50 }51 @end

 

 

3、main文件中的執行代碼

 

1 NSMutableArray *array=[[NSMutableArray alloc]init];     2 Student *stu1=[Student studentWithName:@"zhangsan" andAge:20 andScore:90];     3 Student *stu2=[Student studentWithName:@"lisi" andAge:20 andScore:90];        4 Student *stu3=[Student studentWithName:@"wangwu" andAge:22 andScore:90];      5 Student *stu4=[Student studentWithName:@"zhaoliu" andAge:20 andScore:80];       6 Student *stu5=[Student studentWithName:@"tom" andAge:19 andScore:80];     7   [array addObject:stu1];       8   [array addObject:stu2];     8   [array addObject:stu3];      9   [array addObject:stu4];     10  [array addObject:stu5];    11  [array sortUsingSelector:@selector(compareStudent:)];    12 for(Student *s in array){         13    [s print];       14 }      15 [array release];

 

  

4)performSelector 用于執行SEL封裝的方法 例如:  1 [p1 performSelector:@selector(jump)];  

 


5)SEL 封裝帶參數的方法實例代碼:

1  //將帶一個參數的方法封裝為SEL的變量,執行,參數是id類型2  [p1 performSelector:@selector(print:) withObject:@"hello"];

  

6)NSSelectorFromString 用于將字符串形式的方法名封裝成SEL的數據 實例代碼: 

1  SEL sel2=NSSelectorFromString(@"study");2  [p1 performSelector:sel2];

  

7)_cmd 表示當前執行的方法 例如:  1 NSLog(@"*****metheod:%@",NSStringFromSelector(_cmd));  

 


8)在C語言中 __func__ 表示獲取當前執行方法 例如:  1 NSLog(@"func=%s",__func__);  

 

 

  __DATE__ 表示獲取當前系統時間   1 NSLog(@"date=%s",__DATE__);  

 


9)SEL實現數組排序 實例代碼:

1 void testSel()2 {3     Person *p1;4     Person *p2;5     Person *p3;6     NSMutableArray *array1=[[NSMutableArray alloc]initWithObjects:p1,p2,p3, nil];7     [array1 sortUsingSelector:@selector(comparePerson:)];8     9 }

  

六、構造OC中的二維數組 實例代碼:

  //創建一個空的外層數組 2         NSMutableArray *bigArray=[NSMutableArray array]; 3         //創建一個存放4個數據對象的數組 4         NSMutableArray *array1=[[NSMutableArray alloc]init]; 5         for(int i=0;i<4;i++){ 6             [array1 addObject:[NSNumber numberWithInt:i]]; 7         } 8         //創建一個存放3個字符串的數組 9         NSMutableArray *array2=[[NSMutableArray alloc]init];10         for(int i=0;i<3;i++){11             [array2 addObject:[NSString stringWithFormat:@"str%d",i+1]];12         }13         //將array1和array2兩個數組對象存入外層數組(相當于創建了一個二維數組)14         [bigArray addObject:array1];15         [bigArray addObject:array2];16         17         //遍歷,顯示所有的元素18         for(int i=0;i<bigArray.count;i++){19             for(int j=0;j<[bigArray[i] count];j++){20                 //取出數組中第i行第j列的元素(每行又是一個數組對象)21                 if([bigArray[i][j] isKindOfClass:[NSNumber class]]){22                     NSLog(@"number:%@",bigArray[i][j]);23                 }24                 else if ([[[bigArray objectAtIndex:i] objectAtIndex:j] isKindOfClass:[NSString class]]){25                     NSLog(@"string:%@",[[bigArray objectAtIndex:i] objectAtIndex:j]);26                 }27             }28         }

  

七、Class (類)的介紹

 

 1)類的本質也是一個對象,是Class類型的對象,獲取類對象(可以通過實例方法或類方法獲?。?

       每個類只有一個類對象。


  2)load 方法當程序啟動時會加載所有的類和分類,調用load方法,先加載父類,再加載子類,然后是分類 例如:  

1  +(void)load2  {3      NSLog(@"Person---load");4  }

   

 3)initialize方法 當第一次使用類的時候,調用initialize方法,先調用父類的,再調用子類的 例如:  

1 +(void)initialize2  {3     NSLog(@"Person---initialize");4  }

  

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性生交xxxxx久久久| 欧美性xxxx极品hd满灌| 精品视频在线播放色网色视频| 久久久噜噜噜久噜久久| 国产精品日日做人人爱| 日韩欧美视频一区二区三区| 久久精品视频免费播放| 欧美在线一区二区三区四| 久久国产精品久久精品| 中文字幕日韩av| 亚洲精品久久久久中文字幕二区| 国产伦精品一区二区三区精品视频| 91精品国产色综合久久不卡98口| 中文字幕亚洲欧美在线| 亚洲国产精品yw在线观看| 亚洲无亚洲人成网站77777| 日韩在线精品一区| 日日骚久久av| 神马久久久久久| 欧美日韩国产一区二区三区| 久久精品视频在线播放| 久久久久久久激情视频| www日韩中文字幕在线看| 久久精品国产成人| 久久久亚洲福利精品午夜| 亚洲精品一区二三区不卡| 日韩成人av网址| 亚洲综合在线播放| 欧美性色xo影院| 亚洲一区二区三区乱码aⅴ蜜桃女| 精品偷拍各种wc美女嘘嘘| 久久成人这里只有精品| 欧美一级黄色网| 欧美放荡办公室videos4k| 欧美中文在线字幕| 久久久久久免费精品| 久久噜噜噜精品国产亚洲综合| 日韩激情视频在线播放| 亚洲国产精品中文| 成人深夜直播免费观看| 欧美精品在线第一页| 欧美午夜激情视频| 欧美性在线观看| 日韩在线观看免费全集电视剧网站| 欧美日韩国产在线播放| 国产在线视频一区| 欧美性xxxxxx| 大胆人体色综合| 91超碰caoporn97人人| 亚洲人a成www在线影院| 亚洲欧美日韩一区二区三区在线| 国产精品一区二区3区| 91色视频在线导航| 精品视频在线播放免| 亚洲美女性视频| 91在线观看免费网站| 亚洲精品98久久久久久中文字幕| 国产精品福利在线| 26uuu另类亚洲欧美日本一| 欧美日韩免费一区| 一区二区欧美激情| 岛国av一区二区在线在线观看| 欧美日韩一区免费| 欧美精品激情在线观看| yw.139尤物在线精品视频| 久久欧美在线电影| 日韩av在线网页| 亚洲片国产一区一级在线观看| 中文字幕日韩欧美在线| 91亚洲va在线va天堂va国| 日韩精品视频在线观看网址| 欧洲永久精品大片ww免费漫画| 欧美美女操人视频| 国产免费一区二区三区在线能观看| 自拍亚洲一区欧美另类| 18久久久久久| 国内免费精品永久在线视频| 日韩电影免费观看在线| 亚洲一区二区三区四区视频| 亚洲成色www8888| 欧美激情欧美狂野欧美精品| 久久精品电影网| 日韩精品在线视频| 国产精品观看在线亚洲人成网| 日韩在线视频国产| 日韩在线观看免费全| 亚洲影影院av| 欧美乱大交xxxxx| 69久久夜色精品国产69乱青草| 国产一区二区精品丝袜| 欧美成人午夜激情| 孩xxxx性bbbb欧美| 日韩免费高清在线观看| 热99在线视频| 欧美精品18videosex性欧美| 亚洲无av在线中文字幕| 久久av中文字幕| 亚洲欧美日韩国产中文| 91国产精品电影| 亚洲综合视频1区| 亚洲高清在线观看| 亚洲欧美在线一区二区| 亚洲人成电影在线观看天堂色| 欧美亚洲国产另类| 久久精品视频在线播放| 亚洲va男人天堂| 丰满岳妇乱一区二区三区| 欧美在线一级视频| 亚洲综合在线中文字幕| 久久视频中文字幕| 国产精品久久久久aaaa九色| 亚洲精品国产精品国产自| 国产日韩亚洲欧美| 欧美日韩中文在线| 欧美xxxx18国产| 成人免费视频在线观看超级碰| 久久久国产在线视频| www.欧美三级电影.com| 国产欧美一区二区三区久久人妖| 国产日韩精品在线播放| 97成人在线视频| 日韩av中文字幕在线免费观看| 欧美专区日韩视频| 激情亚洲一区二区三区四区| 欧美巨大黑人极品精男| 国模精品视频一区二区三区| 国产91精品久久久久| 国产精品成人国产乱一区| 亚洲最大的av网站| 日韩亚洲国产中文字幕| 中文字幕在线亚洲| 久久精品亚洲精品| 成人情趣片在线观看免费| 日韩麻豆第一页| 亚洲天堂成人在线视频| 亚洲国产成人精品一区二区| 狠狠色狠狠色综合日日五| 亚洲国产精品99久久| 欧美人与性动交| 国产精品一区二区三区久久| 久久久久久久久亚洲| 久久精品国产一区| 日本在线观看天堂男亚洲| 久久久久成人精品| 国产成人精品在线播放| 久久夜精品香蕉| 久久久久久成人精品| 欧美激情一区二区三区久久久| 日本aⅴ大伊香蕉精品视频| 一区二区日韩精品| 欧美亚洲另类激情另类| 久久久电影免费观看完整版| 欧美巨猛xxxx猛交黑人97人| 国产精品视频网站| 久久成人av网站| 中文字幕日韩av电影| 97精品一区二区视频在线观看| 欧美日韩激情视频8区| 国产99久久精品一区二区| 国产午夜精品全部视频在线播放| 欧美制服第一页| 久久精品99国产精品酒店日本| 国产视频欧美视频| 成人信息集中地欧美|