iOS-Foundation常用類

Foundation框架中最常使用的類大概有這么幾種:NSString、NSArray、NSDictionary以及他們的可變類:NSMutableString、NSMutableArray、NSMutableDictionary。雖然說不必記住每個類提供的方法,但是一定要有概念,以便用到的時候可以去源碼中查找,而減少時間消耗。

NSString&NSMutableString

NSString是一個數(shù)據(jù)類型,用來保存OC字符串,常見的創(chuàng)建方式有以下幾種:

    NSString *str1 = [[NSString alloc]init];
    str1 = @"喵了個咪";
    NSString *str2 = [NSString stringWithFormat:@"hahaha%dxixixix%d",123,456];
    NSString *str3 = [NSString stringWithUTF8String:"你本無意穿堂風(fēng)"];
    NSString *str4 = [NSString stringWithCString:"偏偏倨傲引山洪" encoding:NSUTF8StringEncoding];

輸出結(jié)果:


image.png

NSString常用的方法:

//返回字符串的長度。
@property (readonly) NSUInteger length;
//得到字符串中指定下標(biāo)的字符,打印的話使用%C。
- (unichar)characterAtIndex:(NSUInteger)index;
//判斷當(dāng)前字符串對象和傳入的字符串對象的內(nèi)容是否相同。
- (BOOL)isEqualToString:(NSString *)aString;注意:不可以使用==來判斷兩個OC字符串的內(nèi)容是否相同
//將字符串寫入到指定的文件中。
- (BOOL)writeToFile:(NSString * )path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError ** )error;
//將文件中的內(nèi)容讀取到字符串中.
+ (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;

//判斷字符串是否以指定的字符串開頭
- (BOOL)hasPrefix:(NSString *)str;
//判斷字符串是否以指定的字符串結(jié)尾
- (BOOL)hasSuffix:(NSString *)str;
//在主串中搜索子串.從前往后搜索. 第1次匹配的子串.
- (NSRange)rangeOfString:(NSString *)searchString;
//在主串中搜索子串.從后往前搜索. 第1次匹配的子串.
NSString *str = @"www.baidu.com";
NSRange range = [str rangeOfString:@"com" options:NSBackwardsSearch];
/*
返回值是1個NSRange類型的結(jié)構(gòu)體變量.
typedef struct _NSRange {
     NSUInteger location; 代表子串在主串出現(xiàn)的下標(biāo).
     NSUInteger length; 代表子串在主串中匹配的長度.
} 
*/
//字符串截取
- (NSString *)substringFromIndex:(NSUInteger)from; 從指定的下標(biāo)出一直截取到最后.
- (NSString *)substringToIndex:(NSUInteger)to; 從第0個開始截取指定的個數(shù).
- (NSString *)substringWithRange:(NSRange)range; 截取指定的1段范圍
//字符串替換
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

NSMutableString
NSMutableString繼承自NSString,并對NSString進(jìn)行了擴(kuò)展,同樣用來存儲字符串。與NSString不同的是,無論NSMutableString修改多少次,對象始終只有一個,每次修改字符串的時候,只是在修改該對象的值。
NSMutableString具有NSString的所有方法,此外還有追加函數(shù):

- (void)appendString:(NSString *)aString;
- (void)appendFormat:(NSString *)format, ... ;

需要注意的是,NSMutableString不能直接用字符串常量去初始化。原因也很好理解,當(dāng)子類指針指向父類,調(diào)用子類方法的時候,會出錯。

NSArray

數(shù)組,但是元素只能是OC對象,不能是非OC對象,所以基本數(shù)據(jù)類型等非OC對象需要轉(zhuǎn)化為OC對象才可以存儲。并且NSArray是不可變得,一旦初始化完畢之后,它里面的元素就永遠(yuǎn)是固定的,無法刪除和新增元素。
常用的創(chuàng)建方法:

  NSArray *arr = @[@"桃之夭夭",@"灼灼其華",@"之子于歸",@"宜其家室"];

2.+ (instancetype)arrayWithArray:(NSArray<ObjectType> *)array;創(chuàng)建并返回包含另一給定數(shù)組中的對象的數(shù)組

NSArray *givenArr = @[@"嘻嘻", @"哈哈", @"嘿嘿", @"呵呵",];
NSArray *arr1 = [NSArray arrayWithArray:givenArr];

3.+ (instancetype)arrayWithObject:(ObjectType)anObject;創(chuàng)建并返回一個包含給定對象的數(shù)組。

NSArray *arr2 = [NSArray arrayWithObject:@""];

4.+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ...;創(chuàng)建并返回一個包含參數(shù)列表中的對象的數(shù)組。

 NSArray *arr3 = [NSArray arrayWithObjects:[NSDate date], @"回眸三生琥珀色",@"轉(zhuǎn)身一世琉璃白",@999,nil];   

NSArray遍歷
1.for循環(huán)

NSArray *arr =  @[@"桃之夭夭",@"灼灼其華",@"之子于歸",@"宜其家室"];
    for(NSInteger i = 0; i < arr.count; i++)
    {
        NSString *str = arr[i];
        NSLog(@"for --> %@",str);
    }

2.for in

NSArray *arr =  @[@"桃之夭夭",@"灼灼其華",@"之子于歸",@"宜其家室"];
    for (NSString *str in arr) {
        NSLog(@"for in --> %@",str);
    }

值得注意的是:如果數(shù)組內(nèi)元素的類型不止一種,可以用id類型進(jìn)行遍厲。
3.- (void)enumerateObjectsUsingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block ;

 NSArray *arr =  @[@"桃之夭夭",@"灼灼其華",@"之子于歸",@"宜其家室"];
    [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSLog(@"第%ld個元素:%@",idx,obj);
    }];

obj:代表便利出來的元素的值 , idx:代表元素的下標(biāo),如果希望停止遍歷,將stop指針指向的變量賦值為NO即可。

常見用法
1.- (NSString *)componentsJoinedByString:(NSString *)separator;將數(shù)組中的所有元素用separator拼接成一個字符串。

 NSArray *arr =  @[@"桃之夭夭",@"灼灼其華",@"之子于歸",@"宜其家室"];
    NSString *str = [arr componentsJoinedByString:@"&"];
    NSLog(@"%@",str);
打印結(jié)果.png

2.- (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;字符串提供的分割字符串組成數(shù)組的方法

  NSArray *arr =  @[@"桃之夭夭",@"灼灼其華",@"之子于歸",@"宜其家室"];
    NSString *str = [arr componentsJoinedByString:@"&"];
    NSArray *arr1 = [str componentsSeparatedByString:@"&"];
    }
arr1元素.png

NSMutableArray
NSMutableArray是NSArray的子類,所以NSMutableArray擁有NSArray的所有方法,此外身為可變數(shù)組,所以存儲在NSMutableArray中的元素可以刪除,NSMutableArray也可以動態(tài)增加元素。
一些常用方法:
添加:

NSArray *addArr = @[@"之子于歸",@"遠(yuǎn)送于野"];
NSMutableArray *marr = [[NSMutableArray alloc]init];
//NSMutableArray不能使用@[]創(chuàng)建,因為語法糖創(chuàng)建的是不可變數(shù)組。
[marr addObject:@"燕燕于飛"];
[marr insertObject:@"差池其羽" atIndex:1];
[marr addObjectsFromArray:addArr];
marr.png

刪除:

- (void)removeLastObject; // 刪除最后一個元素
- (void)removeObjectAtIndex:(NSUInteger)index; // 刪除指定元素
- (void)removeAllObjects; // 刪除所有元素
- (void)removeObject:(ObjectType)anObject; // 刪除指定元素
- (void)removeObjectIdenticalTo:(ObjectType)anObject; // 刪除與之相同的元素
- (void)removeObjectsInArray:(NSArray<ObjectType> *)otherArray; // 刪除與另一數(shù)組中元素相同的元素

NSDictionary

NSDictionary以鍵值對的形式存儲數(shù)據(jù),唯一的key對應(yīng)value,通過key來找到存儲在字典中的value。同NSArray一樣,NSDictionary字典一旦創(chuàng)建完畢,其鍵值對的個數(shù)就已經(jīng)固定,無法刪除,新增。
常見創(chuàng)建方法:

NSDictionary *dict = @{@"name":@"Wind",@"age":@28};
NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"name",@"sunshine",@18,@"age", nil];
NSDictionary *dict2 = [NSDictionary dictionaryWithDictionary:dict1];
dict.png

NSDictionary常見方法

// 獲取字典中鍵值對的個數(shù)
NSInteger count = dict.count;
//獲取字典中的值
  id obj = [dict objectForKey:@"name"];
//等價于
  id obj1 = dict[@"name"];

NSMutableDictionary
NSMutableDictionary是NSDictionary的子類,擁有NSDictionary的所有方法,并且可以進(jìn)行增加和刪除。
常用的刪除和增加

- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey; // 添加鍵值對
- (void)removeObjectForKey:(KeyType)aKey; //刪除key對應(yīng)的鍵值對
- (void)removeObjectsForKeys:(NSArray<KeyType> *)keyArray; // 刪除數(shù)組中所有key的鍵值對
- (void)removeAllObjects; // 刪除所有的鍵值對

NSData
NSData為二進(jìn)制數(shù)據(jù),在文件操作(如保存到本地)、網(wǎng)絡(luò)、以及核心圖形圖像中使用較廣泛
NSData創(chuàng)建:

    //對象方法創(chuàng)建
    NSData *data1 = [[NSData alloc] init];
    NSData *data2 = [[NSData alloc] initWithData:data1];
 // 由 字符串 創(chuàng)建
    NSString *string = @"我見眾人皆草木,唯你是青山";
    NSData *data3 = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSData *data4 = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    //由文件創(chuàng)建
    NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];  
    NSData *data5 = [[NSData alloc] initWithContentsOfFile:filePath];
    NSData *data6 = [NSData dataWithContentsOfFile:filePath];
    // 由 URL 創(chuàng)建
    NSURL *urlPath = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]]];
    NSData *data7 = [[NSData alloc] initWithContentsOfURL:urlPath];
    NSData *data8 = [NSData dataWithContentsOfURL:urlPath];   

NSData與別的數(shù)據(jù)類型的轉(zhuǎn)換
與UIImage

//UIImage 轉(zhuǎn)換成 NSData
    NSData *imageData1 = UIImagePNGRepresentation(UIImage *image);     //png 格式 
    NSData *imageData2 = UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality)  //jpeg格式  
    //NSData 轉(zhuǎn)換成 UIImage
    UIImage *aimage = [UIImage imageWithData: imageData]; 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容