美文网首页iOS Developer
项目开发中的一些琐碎知识点汇总

项目开发中的一些琐碎知识点汇总

作者: Mark_Guan | 来源:发表于2016-11-18 17:48 被阅读33次

    1. 判断当前环境是ARC还是MRC

    #if __has_feature(objc_arc)
    // 当前的编译器环境是ARC
    
    #else
    // 当前的编译器环境是MRC
    
    #endif
    

    2. 读取info.plist文件中的数据

    方式一

     // File:获取文件的全路径 => 文件在哪(主bundle)
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Info.plist" ofType:nil];
        
        // 1.解析info,plist
        NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
        
         // 获取当前的版本号
        NSString *Verision = dict[@"CFBundleShortVersionString"];
    

    上述的方式比较麻烦,系统自已为我们提供了一个方法:

    // 第二种方式获取info.plist信息
        NSString * Verision = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"];
    

    3. PCH文件

    PCH文件(Precompile Prefix Header File),也就是预编译头文件,其作用就是,方便你一次性导入在多个文件中同时用到的头文件、宏或者URL地址等(全局使用),可以有效的帮你节约时间,提高开发效率。但是,自从Xcode 6之后,这个文件默认就不再提供了,因为PCH文件需要提前编译,比较耗费时间. 当然如果你还想继续使用的话,需要手动创建并配置。

    使用注意点:

    1. pch需要提前编译
    2. 需要做一些判断,判断下当前有没有c文件,如果有c,就不导入OC的语法
    //判断是否是OC环境
    #ifdef __OBJC__
    
    // 1.存放一些公用的宏
    #define Height (10)
    
    // 2.存放一些公用的头文件
    #import "UIImage+Image.h"
    
    // 3.自定义Log(输出日志) 因为NSLog是非常耗费性能的
    
    #ifdef DEBUG // 调试
    
    #define XMGLog(...)  NSLog(__VA_ARGS__)
    #else // 发布
    #define XMGLog(...)
    
    #endif
    
    #endif
    

    4. 遍历打印所有子视图

    // 获取子视图
    - (void)getSub:(UIView *)view andLevel:(int)level {
        NSArray *subviews = [view subviews];
        if ([subviews count] == 0) return;
        for (UIView *subview in subviews) {
            
            NSString *blank = @"";
            for (int i = 1; i < level; i++) {
                blank = [NSString stringWithFormat:@"  %@", blank];
            }
            NSLog(@"%@%d: %@", blank, level, subview.class);
            [self getSub:subview andLevel:(level+1)];
        }
    }
    

    比如我们想获取self.navigationController.navigationBar的子视图结构我们可以

     [self getSub:self.navigationController.navigationBar andLevel:1];
    

    打印结果:


    单利模式

    单例模式的作用 :可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源。

    利用GCD实现单利模式

    //.h文件
    #import <Foundation/Foundation.h>
    @interface Singleton : NSObject
    
    //单例方法
    +(instancetype)sharedSingleton;
    @end
    
    //.m文件
    #import "Singleton.h"
    @implementation Singleton
    
    //全局变量
    static id _instance = nil;
    
    //类方法,返回一个单例对象
    +(instancetype)sharedSingleton{
        return [[self alloc] init];
    }
    //alloc内部其实就是用allocWithZone:
    +(instancetype)allocWithZone:(struct _NSZone *)zone{
        //只进行一次
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super allocWithZone:zone];
        });
        return _instance;
    }
    //初始化方法
    - (instancetype)init{
        // 只进行一次
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super init];
        });
        return _instance;
    }
    //copy在底层 会调用copyWithZone:
    - (id)copyWithZone:(NSZone *)zone{
        return  _instance;
    }
    + (id)copyWithZone:(struct _NSZone *)zone{
        return  _instance;
    }
    + (id)mutableCopyWithZone:(struct _NSZone *)zone{
        return _instance;
    }
    - (id)mutableCopyWithZone:(NSZone *)zone{
        return _instance;
    }
    @end
    

    相关文章

      网友评论

        本文标题:项目开发中的一些琐碎知识点汇总

        本文链接:https://www.haomeiwen.com/subject/clrlpttx.html