美文网首页
effective tips

effective tips

作者: lotawei | 来源:发表于2016-12-02 17:20 被阅读10次

    # iOS下常用类库整理

    网络处理  AFNetWorking  Alamofire

    数据库    fmdb          sqlite.swift

    图片异步加载 sdwebimage  kingfisher

    分享      ShareSDK

    菊花君    MBProgressHUD

    轮播      SDCycleScrollView  自己封装吧

    json解析  MJEXension    SwiftJson

    视频      IJKMediaplayer

    推送      极光

    总结学习学习Effective Objective-C 2.0  编写高质量iOS与OS X代码的52个有效方法

    1. 消息与函数调用 区别

    oc 中消息型语言与函数调用  oc其运行的代码由运行环境决定  函数调用 由编译器决定

    举例说明多态情况下: oc                    运行时不管是否多态在运行时去查找这个方法

    函数   是多态的话会运行时按照虚方法表来查到底要执行的方法

    明白oc中所有的对象分配是在堆上的,不是在栈上的,延用c  语言的方式

    NSString    astackstring  错误    而只能这样使用NSString  *str; 去手动分配

    2.内存上面的问题

    分配在堆上的对象等需要手动管理  栈上的会在弹出时自动清理  如基本类型的变量 包括一系列CG开头的

    oc中将内存管理抽象出来,不需要用malloc  和 free 分配释放 而去使用引用计数的方式来管理

    3.头文件中尽量少引用其他头文件,说不定就会造成头文件引用

    @class  来标明其它类属性  优雅解决

    使用协议呢 将其放在单独的文件更好

    4.多用类型常量少用预处理

    a.h中预定义 了个  #define  Max    8  那么有b.h 引入这个a.h会把 所有Max 都会换成这个的  且预处理的不含类型信息(缺点)

    使用  static  const  double  max = 8 这种方式会更合适点

    使用const标记的 , 想要对它修改 编译就会让它报错

    如果不加static ,编译器会为其创建一个外部符号  如果另一个类中也声明了这样的常量 max 编译器会给出错误提示

    用static这个可以来标记这种变量命名一样是否可以在多个类中使用

    加了 就不会给他创建一个外部符号,来表示 这个常量就是在本类使用的

    static  const  修饰的只会在编译单元内 私有这样来说比较通俗(什么时编译单元内呢, 实际就是.m文件的东西都属于编译单元)

    定义这些常量的位置讲究, 是否公开这个常量  不公开  放在实现文件    这样做会更好

    命名规范加类名前缀来避免空间 上的重名冲突

    如通知的典范,通知名字字符的定义  .h  中  extern  NSString  *const  eocstring;  .m NSString  *const    eocstring = @“窗口变化饿了”

    怎么看常量定义: 从右向左解读  eocstring 常量 什么样的常量  是一个指针, 这个指针指向nsstring

    extern  关键标识的常量 会放在 全局符号表中  只能定义一次,在实现文件定义好了过后  编译器会在数据段为这个字符串分配存储空间

    这种方式会让编译器来确保常量值不变 ,且不管在哪个类中定义的这个 所有地方都可以用

    5.用枚举的时机 : 状态、选项、状态码

    enum  ECname:NSInteger{

    ECsucceed =  1,

    ECerror,

    };

    //某种状态可以组合  的方式比如在使用到 animation  选项的时候多种状态组合实现

    enum  ECtype:NSInteger{

    ECnone = 0 ,

    ECsucceed = 1<<0,  //00000001

    ECperfect= 1<<1,  //00000010  00000011  3

    };

    typedef enum  ECtype    ectype;

    ectype    atype = ECsucceed | ECperfect ;

    //这种不能判断用与ecnone为0这种 与符号为0嘛

    if ((atype & ECsucceed )  && (atype & ECperfect) ){

    NSLog(@"开启完美 成功模式");

    }

    6.关于runtime机制的理解

    先说原理不好理解,因此先说说它能干什么

    1.  如果是在程序运行过程中 , 希望动态创建一个类(比如kvo底层就是基于这个特性)

    2.程序运行过程中希望动态的生成一些属性或者方法 包括修改

    3.遍历一个类的所有成员变量和方法 ,如一个类的属性方法特别多的时候

    //这个东西 可以用语深层次开发框架

    如:在归档的时候

    -(void)encodeWithCoder:(NSCoder )encoder {

    unsigned int count = 0;

    Ivar ivars = class_copyIvarList([PYPerson class], &count);

    for (int i = 0; i

    相关文章

      网友评论

          本文标题:effective tips

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