2018-4周
一、objc_getAssociatedObject
和objc_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.
四、代理要继承<NSObject>协议
调用代理的可选方法,经常要用到respondsToSelector
,这个是<NSObject>协议里面的
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的最大值(位于屏幕的最下边)
网友评论