2018-4周-iOS工作杂技

2018-4周

一、objc_getAssociatedObjectobjc_setAssociatedObject

主要是创建分类的时候用到,但是要注意的是,如果分类创建的属性是NSSArray...之类的,需要创建对象的,那么分类这个属性的get方法应该这样写

- (NSMutableArray *)array
{
    NSMutableArray *array = objc_getAssociatedObject(self, @"array");
    if (!array) {
        array = [[NSMutableArray alloc] init];
        self.array = array;
    }
    
    return array;
}

- (void)setArray:(NSMutableArray *)array
{
    objc_setAssociatedObject(self, @"array", array, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

二、mutableCopy和copy

mutableCopy:浅复制,指针复制
copy:深复制,内存复制
总结:

  • mutable contaniner classes:copy、mutableCopy都会create a memery , but the copy return an immutable object
  • imutable contaniner classes:copy don't create a memory , only point to the original object address.

三、NSDecimalNumber

NSDecimalNumber is the subclass of NSNumber.
It is mainly used to solve the lack of precision.

四、代理要继承协议

调用代理的可选方法,经常要用到respondsToSelector,这个是协议里面的

if ([self.delegate respondsToSelector:@selector(ViewControllerBsendValue:)])
    {
        //如果协议响应了ViewControllerBsendValue:方法
        //通知代理执行协议的方法
        [_delegate ViewControllerBsendValue:_textField.text];
    }

五、static、extern、const

  • static关键字修饰局部变量:
    1:当static关键字修饰局部变量时,该局部变量只会初始化一次,在系统中只有一份内存
    2:static关键字不可以改变局部变量的作用域,但是可延长局部变量的生命周期,该变量直到整个项目结束的时候才会被销毁

  • static修饰的全局变量:作用域仅限于当前文件,外部类不可以访问到该变量

  • extern:引用关键字,当某一个全局变量,没有用static修饰时,其作用域为整个项目文件,若是在其他类想引用该变量,则用extern关键字,例如,想引用其他类的全局变量,int age = 10;则在当前类中实现,extern int age;也可以在外部修改该变量,extern int age = 40;,若某个文件中的全局变量不想被外界修改,则用static修饰该变量,则其作用域只限于该文件

  • const修饰的指针不能再次赋值

int * const p = NULL;
int a = 20;
*p = &a; // 编译器报错

六、clipsToBounds

具体的说,就是当它取值为 YES 时,剪裁超出父视图范围的子视图部分;当它取值为 NO 时,不剪裁子视图。
默认值为 NO,但是在 UIScrollView 中,它的默认值是 YES,也就是说默认裁剪的。

七、CGRectGetMinX、CGRectGetMaxX、CGRectGetMinY、CGRectGetMaxY

  • CGRectGetMinX方法的作用得到目前view在当前屏幕中相对于整个View的最小值(位于屏幕的最左边)
    其实 CGRectGetMinX = view.origin.x

  • CGRectGetMaxX方法的作用得到目前view在当前屏幕中相对于整个View的最大值(位于屏幕的最右边)
    其实 CGRectGetMaxX = view.origin.x + view.size.width

  • CGRectGetMinY方法的作用得到目前view在当前屏幕中相对于整个View的最小值(位于屏幕的最上边)

  • CGRectGetMaxY方法的作用得到目前view在当前屏幕中相对于整个View的最大值(位于屏幕的最下边)

八、故事版的属性不走get、set方法

你可能感兴趣的:(2018-4周-iOS工作杂技)