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 *)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);
  }


你可能感兴趣的:(iOS零星知识点 -03)