Objective-c基础:Foundation标准库

文章目录

    • NSString多行换行
    • 组合字符串
    • 分割字符串
    • 字符串去空格
    • 字符串替换删除
    • 替换某个区间内的内容
    • 基本数据类型转换成字符串
    • NSArray用法
    • 可变数组
    • 枚举类型使用
    • NSDictionary字典
    • NSFileManager:操作文件/文件夹
    • 默认NSDate获取时间
    • NSTimer计时器
    • NSLog扩展

Objective-C中的Foundation标准库,就像C++中的STL标准库一样,是必须学习的,其中封装了很多非常好用的类。之前学习OC时候,也系统的了解了一下,总结了一些模块的用法,这里把笔记分享给大家。希望对OC学习者能有些帮助。

NSString多行换行

NSString * string = @"abc"
  @"bcd"
  @"uto";
NSString *string = @"123halihong123";
NSRange range={3,8};
NSString* newString = [string substringWithRange:range];
NSRange range =[string rangeofString:@"ha"];
NSStringFromRange(range);
if(range.length == 0) {"没找到"}
if(range.location == NSNotFound) {}
char  cc = [string characterAtIndex:2];

组合字符串

stringByAppendingFormat
stringByAppendingString
//添加固定长度的字符串
stringByPaddingTolength 

分割字符串

componentsSeparatedByString:
返回NSArray<NSString*>*
NSArray* array = @[@"a",@"b",@"c"];
[array componentJoindedByString]:@"_"];
//字符集合切分
componentsSeparatedBycharacterInSet
//移除集合中的字符
stringtrimmingChracterInset

字符串去空格

string = [string stringByTrimmingCharacterInSet:[NSCharacterSet whitespaceCharacterSet]];
substringtoIndex

字符串替换删除

stringByReplaceingOccurencesOfString:@"li" withString:@"liu";
stringByReplacingCharactersInRange:(NSRange) withString:(nonnull NSString*)

替换某个区间内的内容

//字符串比较
compare: NSString*
返回NSComparisonResult
if( rs == NSOrderedAscending) {string1 < string2}
else if(rs == NSOrderedSame){string1 == string2}
else(string1 > string2)
//忽略大小写比较
caseInsensitiveCompare
//是否以...开头
hasPrefix 
//是否以...结尾
hasSuffix
//变大写
uppercaseString 
//变小写
lowercaseString 
//单词首字母变大写
captialzeString

基本数据类型转换成字符串

NSString* string = [NSString stringWithFormat:@"%d", 123]
int num = [string initValue];
double named = [string doubleValue];

NSArray用法

//第一个元素
firstObject
//最后一个元素
lastObject 
//指定元素下标
[array objectAtIndex:1]
array[1]

containObject: (ObjectType) anobject;
//要判断自定义类的数组是否包含某一项 需要重写该类的
(BOOL) isEqual:(id) object方法
-(BOOL) isEqual:(id)Ojbect {
if(self == object){
return YES;
}
if([self class] != [object class])
{
return NO;
}
Person* p = (Person*) object;
if( ![_name isEqualToString: p.name]){
return NO;
}
if(_age != p.age){
return NO;
}
return YES;
}
//根据对象返回索引值
[array indexofOjbect:@"c"]
//给数组里的对象发送消息
[array makeObjectsPerformSelector:@selector(test)];
//不可变数组追加对象
[array arrayByAddingObject: @"d"]
//给自定义对象的数组排序
[array sortedArrayUsingSelector:@selector(compareAge)];
- (NSComparisonResult)CompareAge: (Person*) p{
if(_age >p.age){
return NSorordedDescending;
}
else if(_age <p.age){
return NSorderedAscendign;
}
else
return NSorderedSame;
}

可变数组

//NSMutableArray 常用用法
//1.初始化
[NSMutableArray array]
//2.追加元素
[array addObejct:@"1"]
//3.追加数组
[array addObjectFromArray:@[@"2",@"3"]]
//4.插入元素
[array insertObject:@"0" atIndex:0]
//5.删除最后一项
[array removeLatObject]
//6.删除指定对象
[array reomveObject:@"2"]
//7.删除指定索引下的对象
[array removeObjectAtIndex:1];
//8.删除子数组
[array removeObjectsInArray:@[@"0",@"1"]];
//9.根据索引替换对象
[array replaceObjectAtIndex:1 withObject:@"az"]
//10.交换两个索引下的对象
[array exhangeObjectAtIndex:0 withObjectAtIndex:2];
//11.覆盖原数组
[array setArray: @[@"a",@"b",@"c"]];

枚举类型使用

typedef NS_ENUM(NSUinterger, CustomType){
CustomTypeName,
CustomTypeTop,
CustomTypeBottom.
};
//枚举类型需要相互组合
typedef NS_OPTION(NSUInteger, CustomType){
CustomTypeNone  = 0,
CustomTypeTop = 1 << 0,
CustomTypeBottom = 1 <<1,
CutomTypeLeft = 1 << 2,
CustomTypeRIght = 1 << 3,
};
//类型之间用 “|” 连接
//例如 CustomTypeBottm | CustomTypeLeft

NSDictionary字典

字典的键值编码是无序的

//key唯一的,value是可以重复的
NSDictionay* dict = [[NSDictionary alloc]  initWithObjectsAndKeys: @"value",@"key1",@"value2",@"key2",nil];
//nil结尾 ,前一项为value 后一项是key;

NSDictionary* dict2 = [NSDictionary dictionaryWithObjects:@[@"value1",@"value2"] forkeys:@[@"key1",@"key2"]];
NSDictionary* dicts = @{@"key1":@"value"};

//获取字典的值
[dict3 objectForkey:@"key2"]
dicts[@"keys"]
for(NSString* string in dicts){
string = dicts[string];
}

NSArray* array = [dicts allkeys];
NSArray* array = [dicts allValues];
[dict3 vlaueForkey:@"keys"]
[dicts ObjectForkey:@"2"]
//valuesForkey 是NSString  ObjectForkey 传id类型
//allkeysForObjet 找值相同的key

NSMutableDictionary * dict = [NSMutableDictionary dictionary];
dict[@"key1"] = @"value";
NSLog(@"%@",dict);
[dict setObject:@"keys" forkey:@"value2"];
[dict reomoveObjectForkey: @[@"key1",@"key2"]];
[dict removeALlObject];

NSFileManager:操作文件/文件夹

主要对它们进行创建、删除、复制、拷贝、移动以及设置和获取属性

//单例模式创建对象
NSFileManager *manager = [NSFileManager defaultManager];
 
NSString *path1 = @"/Users/frank/Desktop/Demo";
NSString *path2 = @"/Users/frank/Desktop/demo.txt";
 
//判断指定的文件或者文件夹在磁盘上是否真实存在
BOOL isExist = [manager fileExistsAtPath:path1];
 
//判断指定的路径是否真实的存储在磁盘上,并且判断这个路径是文件夹路径还是文件路径
BOOL flag =NO;
BOOL ressult = [manager fileExistsAtPath:path1 isDirectory:&flag];
 
//判断指定的文件夹或者文件是否可以读取
BOOL isRead = [manager isReadableFileAtPath:path2];
 
//判断指定的文件夹或者文件是否可以写入
BOOL isWriter = [manager isWritableFileAtPath:path2];
 
//判断指定的文件夹或者文件是否可以删除
BOOL isDelete = [manager isDeletableFileAtPath:path2];
 
//获取指定文件或者文件夹的属性信息(通过key,可以拿到特定的信息)
NSDictionary *dict = [manager attributesOfItemAtPath:path2 error:nil];
 
//获取指定目录下的所有的文件和目录(包括子目录的子目录)
NSArray *arr1 = [manager subpathsAtPath:path1];
 
//获取指定目录下的所有子目录和文件(不包括子目录的子目录)
NSArray *arr2 = [manager contentsOfDirectoryAtPath:path1 error:nil];
 
//在指定的目录创建文件
NSData *data = [@"你好" dataUsingEncoding:NSUTF8StringEncoding];
BOOL isSucceed = [manager createFileAtPath:@"/Users/frank/Desktop/hello.txt" contents:data attributes:nil];
 
//在指定的目录创建文件夹
/**
  第1个参数:路径
  第2个参数:YES就会连续创建文件夹;NO就不会做连续创建
  第3个参数:指定属性,nil为系统默认属性
  第4个参数:错误
*/
BOOL isSucceed1 = [manager createDirectoryAtPath:@"/Users/frank/Desktop/test"        
          withIntermediateDirectories:NO attributes:nil error:nil];
 
//拷贝文件
BOOL isSucc = [manager copyItemAtPath:@"/Users/frank/Desktop/hello.txt" toPath:@"/Users/frank/Desktop/test/hello.txt" error:nil];
 
//移动文件,文件的重命名(文件移动到原来的目录,名称改变)
BOOL isSucc1 = [manager moveItemAtPath:@"/Users/frank/Desktop/hello.txt" toPath:@"/Users/frank/Desktop/demo/hello.txt" error:nil];
 
//删除文件
BOOL isSucc2 = [manager removeItemAtPath:@"/Users/frank/Desktop/hello.txt" error:nil];

在Objective-C编程中,错误处理由Foundation框架中提供的NSError类提供处理。与仅使用错误代码或错误字符串相比,NSError对象封装了更丰富且更具可扩展性的错误信息。 NSError对象的核心属性是错误域(由字符串表示),特定域的错误代码和包含应用程序特定信息的用户信息字典。

Objective-C程序使用NSError对象来传达有关用户需要了解的运行时错误的信息。 在大多数情况下,程序会在对话框或工作表中显示此错误信息。 但它也可能会解释信息并要求用户尝试从错误中恢复或尝试自行更正错误
NSError对象包括: 域 。 错误域可以是预定义的NSError域之一,也可以是描述自定义域的任意字符串,不能为nil。

nil对象是空的, Nil一个空类; NSNull 是可以放在数组中的空对象,
数组是有序的Set是无序的

NSSet* set = [[NSSet alloc] initWithObjects:@"a",@"b",@"c",nil];
NSSet* set = [NSSet setWithObjects: @"a",@"b",@"c",nil];
[NSSet setWithArray: array];

NSNumber* num1 = [[NSNumber alloc] initWithInt:20];
[NSNumber numberWithChar: 'c'];
NSNumber* num3 = @300;
NSNumber* num4 = @"a";
NSNumber* num5 = @"123.2";
NSNumber* num6 = @(a); 变量
[num6 charValue] intValue  floatValue  doubleValue

//结构体和对象之间相互转换
typedef   struct {
char* name;
int age;
char sex;
}Sperson;
NSValue* value = [ NSValue valueWithBytes:&person  objectType:@encode(SPerson)];
Sperson* person2 = [Value getValue: &person2];

NSRange range = {2,4};
NSValue* rangeValue = [NSValue valueWithRange:range];
[rangeValue rangeValue];

ios能写入文件的类有: NSString NSArray NSDictionary DSData NSDate NSValue NSNumber 。 写入方法如下:

BOOL isSuccess = [string writeToFile:path atomically:YES encoding: NSUTF8StringEncoding error:&error];
[NSString  stringWithContentOfFile];
error.localizedFailureReason打印失败的原因 

[array writeToFile:path atomically:YES] 写出的是XML文件
ios本地存储的文件类型:属性列表 sqlite  coredata  归档 plist文件
[NSArray  arrayWithContentofFile:path];

[dict writeToFile];
[NSDictionary  dictionaryWithContentofFile:path];
NSData二进制流
NSString* string = @"feifei";
NSData* data = [string dataUsingEncoding: NSUTF8StringEncoding];
NSString* string2 = [NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];

默认NSDate获取时间

默认NSDate获取的时间为格林尼治时间

NSDate* date = [NSDate date];
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:];
NSDate* date = [NSDate dateWithTimeInterval: sinceDate:];

[NDDate  isEqualToDate: date2];
NSDate*date = [data laterDate: data2];
NSComparisonResult rs = [date compare:date2];

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
formatter.dateStyle = NSDateFormatterShortStyle;
formatter.timeStyle = NSDateFormatterShortStyle;
[formatter stringFromDate: date];
formatter.locale = [NSLocale localeWIthLocaleIdentifier:@"zh-cn"];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString* string = @"2016-12-29 10:18:19";
NSDateFormatter* formatter = [[NSDateFormater alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
[formatter dateFromString:string];

NSTimer计时器

NSTimer 必须运行在NSRunLoop上

[NSTimer scheduledTimeInterval:2 target: self selector:@selector(daAction:) userInfo:nil repeat:NO];
[[NSRunLoop  mainRunLoop] run];
-(void)  doAction: (NSTimer* ) timer{}

NSTimer* timer:[NSTimer timerWithTimeInterval:2 target: self  selector:@selector(doAction:) userInfo: nil repeat:YES];
[NSRunLoop mainRunLoop]  addTimer:timer forMode:NSDefaultRunLoopMode];
[NSRunLoop mainRunLoop] run];
[timer invalidate];   //立即停止

NSLog扩展

NSLog(@"%d",1);
NSLog(@"%p",self);
NSLog(@"%@",[NSString stringWithUTF8String:__FILE__]);//文件的路径
NSLog(@"%d",__LINE__);
NSLog(@"%@",[NSString stringWithFormat:(@"%d  %@"),1,@"dahuan"]);

#define DEBUG

#ifdef DEBUG
#define DLog(s,...)    
NSLog(@"<%p %@:%d> %@", self [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__]);

DLog(@"%d",1);

你可能感兴趣的:(移动端,objective-c,ios,xcode)