美文网首页
一些总结

一些总结

作者: 成功没有捷径_LBQ | 来源:发表于2016-11-25 13:54 被阅读0次

    1.虽然Objective-C在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。
    2.父类指针可以指向子类对象
    3.一个对象(Object)的isa指向了这个对象的类(Class),而这个对象的类(Class)的isa指向了metaclass。这样我们就可以找到静态方法和变量了。

    4.NSRange 各种初始化方法
    NSRange range1;

        // 分别赋值
        range1.location = 18;
        range1.length = 20;
        print_range(range1);
        
        // 结构初始化方法
        NSRange range2 = {20, 40};
        print_range(range2);
        
        // 调用辅助的build函数
        NSRange range3 = NSMakeRange(30, 60);
        print_range(range3);
        
        // 暂时没有确定的有意义的值,可以设置成NSNotFound
        NSRange range4 = {NSNotFound, NSNotFound};
        print_range(range4);
    

    5.block
    block是ios中一种比较特殊的数据类型
    block的作用:
    用来保存某一段代码,可以在适当的时间再取出来调用
    功能类似于函数和方法
    默认情况下block存储在栈中, 如果对block进行一个copy操作, block会转移到堆中
    如果block在栈中, block中访问了外界的对象, 那么不会对对象进行retain操作
    如果block在堆中, block中访问了外界的对象, 那么会对外界的对象进行一次retain

    6.@synthesize
    @synthesize在.m文件里自动生成了get/set方法。因此,我们只要在@implementation后面加上一行:@synthesize 就可以自动生成get/set方法了,省掉了很多麻烦。
    从Xcode4.4开始,编译器会自动为每一条@property都添加一条对应的@synthesize,因此以后我们只要写一个@property就可以了!

    1. 点语法:编译器会自动将点语法转换成set、get方法的调用代码

    copy和mutableCopy区别:
    copy, 无论被复制的对象是否是可变的, 复制出来的副本都是不可变的
    mutableCopy, 无论被复制的对象是否是不可变的, 复制出来的副本是可变的
    // 从不可变到可变, 地址不一样
    // 从可变到可变, 地址不一样
    // 从可变到不可变, 地址不一样
    // 从不可变到不可变, 地址一样
    ( 原因: copy核心就是为了保证修改其中一个对象不会影响到另外一个对象
    由于源和副本都不可以被修改, 所以不用创建一个新的对象)
    /*
    总结:
    核心: 修改源对象不会影响到副本对象, 修改副本对象不会影响到源对象
    深拷贝和浅拷贝
    会创建新的对象的拷贝, 我们称之为深拷贝
    不会创建新对象的拷贝, 我们称之为浅拷贝(指针拷贝)
    */
    对于mutableCopy,此重新创建了一个内存地址,为深拷贝。
    而字符串默认是浅拷贝

    9.// 只要在对象前面加上__block, 无论block在栈中还是堆中, 都不会对外界的对象进行retain操作

    10.在ARC中 assign,weak,copy,strong 属性的作用,下列说法正确的是(多选)( ABCD )
    A.copy : 一般用于NSString\block
    B.strong : 一般用于除了NSString\block以外的OC对象
    C.weak : 一般用于代理\UI控件 当2个对象相互引用,一端用strong,一端用weak
    D.assign : 基本数据类型、枚举、结构体(非OC对象)

    11.UIViewController在整个生命周期中,以下各个方法的调用顺序正确的是( A )
    A. init -> viewDidLoad -> viewWillApper -> viewDidAppear -> viewWillDisapper -> viewDidDisapper

    12.关于NSSet、NSArray、NSDictionary
    NSArray 是顺序的,可以通过下标获取数组中的对象
    NSDictionary 是无序的,通过键值对匹配,可以通过key-->value
    NSSet、NSArray、NSDictionary只能保存Cocoa对象,不能用于保存C语言中的基本数据类型

    13.iOS中代理设计模式
    代理本身是一个对象,这个对象是专门代表被代理对象来和程序中其他对象打交道的。
    代理的主要价值是它可以让你容易的定制各种对象的行为。
    当一个类的某些功能需要被别人来实现,但是既不明确是些什么功能,又不明确谁来实现这些功能的时候,代理模式就可以派上用场。

    1. import 是 #include 的替代指令,防止重复引用

    15.代理和通知
    共同点
    利用通知和代理都能完成对象之间的通信
    (比如A对象告诉D对象发生了什么事情, A对象传递数据给D对象)

    不同点
    代理 : 1个对象只能告诉另1个对象发生了什么事情
    通知 : 1个对象能告诉N个对象发生了什么事情, 1个对象能得知N个对象发生了什么事情

    16.好用的打包工具:
    https://github.com/Caiflower/Autobuild
    ipa包丢到fir.im上. 测试们自己扫码下载啊
    http://fir.im/

    17.#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
    用法:self.richLabel.textColor = UIColorFromRGB(0x7e7e7e);

    相关文章

      网友评论

          本文标题:一些总结

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