1、isKindOfClass 与 isMemberOfClass 的区别
判断对象类型
-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例。
-(BOOL) isMemberOfClass: classObj 判断是否是当前这个类的实例。
2、return/break/continue区别
return 停止了这个for循环,跳出循环并且停止执行fn函数里后边的语句;
break 停止了这个for循环,跳出循环来继续执行fn函数里之后的语句 ;
continue 只是停止了当前循环,继续执行后面的循环,当循环执行完继续执行fn函数里之后的语句 。
3、#import<> 和 #import""的区别
#import<>用来包含系统自带的文件,#import""用来包含自定义的文件。
4、#import 跟#include 的区别
#include是c/c++导入头文件的关键字,
#import 是oc导入头文件的关键字,#import会自动导入一次,不会重复导入,不会引起交叉编译,
5、@class
作用 可以简单地引用一个类
仅仅是告诉编译器:这是一个类;并不会包含该类的所有内容。
对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类。
这种嵌套包含的代码编译用#import就会报错,当使用@class在两个类相互声明,就不会出现编译报错。
6、深拷贝和浅拷贝的区别
深拷贝就是内容拷贝,浅拷贝就是指针拷贝。
深拷贝就是拷贝出和原来仅仅是值一样,但是内存地址完全不一样的新的对象,创建后和原对象没有任何关系。
浅拷贝就是拷贝指向原来对象的指针,使原对象的引用计数+1,可以理解为创建了一个指向原对象的新指针而已,并没有创建一个全新的对象。
7、frame和bounds的区别
frame: 该view在父视图坐标系统中的位置和大小。(参照点是,父视图的坐标系统)。
bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统,以0,0点为起点)。
当bound改变时,新的frame的size等于bound的size。
新的frame.x = 旧frame.x - (bounds.size.witdh - 旧frame.size.width)/2
新的frame.y = 旧frame.y - (bounds.size.height - 旧frame.size.height)/2
总结:
frame是参考父view的坐标系来设置自己左上角的位置。
设置bounds可以修改自己坐标系的原点位置,进而影响到其“子view”的显示位置。









网友评论