iOS总结2
1/瀑布流:
(1)水平出现,计算可见的矩形框,size是collectionview的size,原点是scrollview的左边偏移量,计算屏幕的中间,通过是否交互进行判断视图是否交互:CGRectIntersectsRect(recr,rect); 返回值是布尔值。只遍历看的见的进行处理,
2.碰撞检测:
(1)返回值是布尔,两个frame是否相交,yes 是相交,no.是不相交
CGRectIntersectsRect(<#CGRect rect1#>, <#CGRect rect2#>)
3.隐藏状态栏
(2) 调整边距,可以让表格视图让开状态栏
4. 使用XIB注意事项:
(1) 从XIB 加载后,自动加载,纯代码手写,不会被执行.
(2)
纯代码手写调用这个方法:
5.自定义cell的时候点击的选中取消选中的时候的调用的方法
6.延时操作,放在dispatch_after代码块中
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 *NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
});
7.刷新之后的插入一个行数,并且滚动到底部H
8. 小技巧,预处理指令
9.内存问题
(1)iOS 中栈区默认是1M, MacOs中默认是8M
(2)堆区是使用系统内存和虚拟内存:
特点
1.所有的应用程序共享,
2.所有的堆中得内存分配都是由操作系统负责的.
3.操作系统使用"链表"(类似数组) 头指针永远不动,next->指针,进行一个一个寻找,单向链表,用链表维护所有已经分配的内存
4.堆中的内存释放,程序通知系统释放内存, mrc,下p release .引用计数,表明一个对象到底被多少个对象引用. 当引用计数为0的时候会被立即释放.
5.strong.weak 光分配不释放,就会引起内存泄露,当操作系统重启的时候才会释放..垃圾回收机制. 在oc中没有垃圾回收机制,用在Mac上. oc中有,iOS 中没有,有虚拟机调度,不由程序员自身调度 C语言机制,程序员自己释放,
6.堆中所有的空间都是匿名访问的, 在堆中的所有变量类型都是匿名访问的.能否访问对象的属性,或者调用方法,取决于指定变量的类型,所有的堆中的变量 都是使用的指针进行匿名访问,
7.nil 的地址就是0x0 NULL 是一个地址,oc 中nil可以调用任何的方法,都不会报错. nil 是指针指向NULL的空对象.
(3)copy 当修改一个对象的时候,不影响另外其他的副本 目的: 建立一个副本,彼此修改,互补干扰
copy,mutableCopy 针对foundation框架的 数据类型
1. 对于自定义类,copy就是可变的, 可变->可变; 可变->不可变
2.不可变->不可变的.(浅复制 )指针复制,引用计数加1,不可变->可变,地址改变.
3 .前复制.不可变->不可变,深复制.其他三种情况
nsstring ,block 使用copy属性,在赋值时会默认做一次copy操作.
strong. 默认是retain 在赋值时只是引用计数加1,其他什么都不做, copy 是不可变的类型,
对于可变类型的属性,不要使用copy 操作,否则赋值后, 就是变成不可变的了.
10:在model类中,两个小方法:
(1)-personinitWithDict:(NSDictionary *)dict 利用字典赋值
(2) 重写description 方法: [nsstring stringWithFormat :@"<%@,%p> {name : %@,age : %@}",self.class,self,self.name,self.age ];
(3) 自定义对象,要实现copy功能,要实现<nscoping>协议, 实现这个方法 - 号方法 copyWithZone :Zone 区域,极少用.
所有的copy方法,最终都会调用这个方法,copy操作是将一个对象,赋值给一个新的对象,person 实例化对象, 给属性赋值.
11. 使用self.class 能够保证继承的子类同样使用copy方法 若是使用父类的person alloc. 子类的class都是person.
12: 关于遵守协议 : 本质上是方便程序员的代码编写.Xcode也会只能提示,并不影响程序本身运行.