iOS零星知识点 -03

查看提示

01 tableView的编辑状态
02 tableViewCell的刷新
03 获取沙盒各个文件路径
04 计算文字尺寸
05 UINavigationController pop移除控制器的三个方法
06 Modal 的两个方法(都带有回调方法的)
07 initailize、load 方法的区别
08 重要方法
09 UICollectionView相关知识
10 判断系统版本
11 Xcode 模拟器上的一些快捷键
12 块遍历
13 自动布局UIButton 和 UILabel
14.测试某段代码执行效率
pragma mark - 01 tableView的编辑状态
  • 如果实现了这个方法,就自动实现了滑动删除的功能
  • 点击了删除按钮就会调用
  • 提交了一个编辑操作就会调用(操作:删除\添加)
  • @param editingStyle 编辑的行为
  • @param indexPath 操作的行号
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:

(NSIndexPath *)indexPath
{if (editingStyle == UITableViewCellEditingStyleDelete) { // 提交的是删除操作,默认就是传的删除
}
pragma mark - 02 tableViewCell的刷新
全局刷新:[self.tableView reloadData];
局部刷新:NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];
//刷新第 0 组的第 row 行
pragma mark - 03 获取沙盒各个文件路径
  • 沙盒各个文件夹的作用
#Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

#Library:存储程序的默认设置或其它状态信息;

#Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

#tmp:提供一个即时创建临时文件的地方。


  • 获取沙盒根目录:
-(void)dirHome{ NSString *dirHome=NSHomeDirectory(); 
NSLog(@"app_home: %@",dirHome);}
  • 获取 Documents 目录路径:
//获取Documents目录
-(NSString *)dirDoc{ 
//[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSLog(@"app_home_doc: %@",documentsDirectory); return documentsDirectory;}
  • 获取 Library 目录路径
//获取Library目录-(void)dirLib{ 
//[NSHomeDirectory() stringByAppendingPathComponent:@"Library"]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
NSString *libraryDirectory = [paths objectAtIndex:0]; 
NSLog(@"app_home_lib: %@",libraryDirectory);}
  • 获取 Cache 目录路径
//获取Cache目录-(void)dirCache{ 
NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachePath = [cacPath objectAtIndex:0]; 
NSLog(@"app_home_lib_cache: %@",cachePath);}
  • 获取 Tmp 目录路径
//获取Tmp目录-(void)dirTmp{
//[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];
 NSString *tmpDirectory = NSTemporaryDirectory(); 
NSLog(@"app_home_tmp: %@",tmpDirectory);}
  • 创建文件夹
//创建文件夹-(void *)createDir{
 NSString *documentsPath =[self dirDoc]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; 
// 创建目录 BOOL res=[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
 if (res) { NSLog(@"文件夹创建成功"); }else NSLog(@"文件夹创建失败"); }}
  • 创建文件
//创建文件-(void *)createFile{ 
NSString *documentsPath =[self dirDoc]; 
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; 
NSFileManager *fileManager = [NSFileManager defaultManager];
 NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; 
BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil]; 
if (res) { NSLog(@"文件创建成功: %@" ,testPath); }else NSLog(@"文件创建失败"); }}
  • 写数据到文件:
//写文件-(void)writeFile{ 
NSString *documentsPath =[self dirDoc]; 
NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
 NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; 
NSString *content=@"测试写入内容!";
 BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
if (res) { NSLog(@"文件写入成功"); }else NSLog(@"文件写入失败"); }}
  • 读文件数据:
//读文件-(void)readFile{ 
NSString *documentsPath =[self dirDoc];
 NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; 
NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; //NSData *data = [NSData dataWithContentsOfFile:testPath]; /
/NSLog(@"文件读取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
 NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil]; 
NSLog(@"文件读取成功: %@",content);}
pragma mark - 04 计算文字尺寸
  • @param text 需要计算尺寸的文字
  • @param font 文字的字体
  • @param maxSize 文字的最大尺寸
- (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxSize:(CGSize)maxSize{
NSDictionary *attrs = @{NSFontAttributeName : font};return [text boundingRectWithSize:maxSize options:
NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;
}
之后调用上面方法就可以根据文字内容判断文件占用的尺寸了(宽和高),例如:
CGSize nameSize = [self sizeWithText:self.status.name font:MJNameFont maxSize:CGSizeMake(MAXFLOAT,MAXFLOAT)];
MAXFLOAT 表示无限大
pragma mark - 05 UINavigationController pop移除控制器的三个方法
将栈顶的控制器移除:
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
回到指定的子控制器:
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
回到根控制器(栈底控制器):
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
pragma mark - 06 Modal 的两个方法(都带有回调方法的)
以 Modal 的形式展示控制器:
-(void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void(^)(void))completion
关闭当初 Modal 出来的控制器:
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
pragma mark - 07 initailize、load 方法的区别
(1)initailize、load 都是类方法
(2)当一个类被装载进内存时,就会调用一次 load 方法(当时这个类还不可用)
(3)当第一次使用这个类时,就会调用一次 initailize 方法
pragma mark - 08 重要方法
/**
* 当一个对象从 xib 或者 storyboard 中加载完毕后,就会调用一次
*/- (void)awakeFromNib{
       NSLog(@"awakeFromNib");
}
/*** 从文件中解析一个对象的时候就会调用这个方法*/
- (id)initWithCoder:(NSCoder *)decoder{
if (self = [super initWithCoder:decoder]) {
 }
return self;
}
/*** 通过代码创建控件的时候就会调用*/
- (id)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
}
return self;
}
pragma mark - 09 UICollectionView相关知识
// 1.每个 cell 的尺寸
layout.itemSize = CGSizeMake(80, 80);
// 2.设置 cell 之间的水平间距
layout.minimumInteritemSpacing = 0;
// 3.设置 cell 之间的垂直间距
layout.minimumLineSpacing = 10;
// 4.设置所有 cell 组成的一个整体与屏幕(ViewController)四周距离
layout.sectionInset =UIEdgeInsetsMake(layout.minimumLineSpacing, 0, 0, 0);

// 5.注册 cell(告诉 collectionView 将来创建怎样的 cell)
//通过 xib 自定义的 cell
UINib *nib = [UINib nibWithNibName:@"MJProductCell" bundle:nil];
[self.collectionView registerNib:nib forCellWithReuseIdentifier:@"cell"];

//使用默认的 UICollectionViewCell
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:MJProductCellID];


pragma mark - 10 判断系统版本
if([[UIDevice currentDevice].systemVersion doubleValue]>=7.0){
//是 IOS7 至以上版本
}else{
//IOS7 以下版本
}
pragma mark - 11 Xcode 模拟器上的一些快捷键
Cmd+1/2/3       可以切换模拟器的显示比例。

Option+Shift     可以在模拟器中调出双指拖动效果。

Option      可以在模拟器中调出双指放大缩小效果。

command+Shift+H       模拟器的Home键。

Cmd+向左箭头/向右箭头       切换横竖屏。
pragma mark - 12 块遍历
#遍历数组
-(void)enumerateObjectsUsingBlockArr
{
    //创建数组
    NSArray *array = @[@"tamc",@"kobe",@"king",@"Ko",@"Tmac",@"Brant",@"jiangjun"];
    [array enumerateObjectsUsingBlock:^(id  _Nonnull key, NSUInteger idx, BOOL * _Nonnull stop) {
        // NSLog(@"string = %@",key);
        if (idx == 0) {
            NSLog(@"string = %@",key);
        }
    //再加个判断,当遍历到某某值时停止遍历
        if ([key isEqualToString:@"king"]) {
            *stop = YES;
            NSLog(@"string = %@",key);
        }
    }];
}
#遍历字典
-(void)enumerateObjectsUsingBlockDict
{
     NSDictionary *dict = @{@"name":@"jiangjun",@"sex":@"man",@"age":@"18",@"whight":@"65",@"higeht":@"180"};
   [dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL * _Nonnull stop) {
       NSLog(@"value = %@",obj);
       NSLog(@"key = %@",key);
 }];
}

pragma mark - 13 自动布局UIButton 和 UILabel
#对于UIButton 和 UILbel 来说做约束时只需要做x,y轴约束,宽高控件本身会自己算的
pragma mark - 14 测试某段代码执行效率
#在点击屏幕的这个方法中用for循环创建10000个Person类对象,测试其执行时间
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSDictionary *dict = @{@"name":@"jiang",@"age":@"18"};
    //获取当前时间
    NSTimeInterval start = CACurrentMediaTime();
       for (int i = 0; i < 10000; i++) {
        Person *per = [Person personWithDict:dict];
    }
     NSLog(@"%f",CACurrentMediaTime() - start);
  }


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容