知识小总结三 (区别与联系)☀️

#include与#import的区别

  • #include 和#import其效果相同,都是查询类中定义的行为(方法);
  • #import不会引起交叉编译,确保头文件只会被导入一次;

#import 与@class 的区别

  • @class 的表明,只定 义了类的名称,而具体类的行为是未知的,一般用于.h 文件;
  • @class 比#import 编译效率更高。
  • 此外@class 和#import 的主要区别在于解决循环引用的问题。

@public、@protected、@private 它们的含义与作用

  • @public:对象的实例变量的作用域在任意地方都可以被访问 ;
  • @protected:对象的实例变量作用域在本类和子类都可以被访问 ;
  • @private:实例变量的作用域只能在本类(自身)中访问 .

深拷贝和浅拷贝的区别

  • 浅复制:两个实例的指针仍指向内存中的同一资源,只复制指针值而不是实际资源;
  • 深复制:不仅复制指针值,还复制指向指针所指向的资源。

frame和bounds有什么不同?

  • frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
  • bounds指的是:该view在本身坐标系统中的位置和大小。(参照点是本身坐标系统)

property属性的修饰符的作用

  • getter=getName、setter=setName:设置setter与getter的方法名;
  • readwrite、readonly:设置可供访问级别;
  • assign:方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题;
  • retain:其setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序;
  • copy:其setter方法进行copy操作,与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
  • atomic: 原子性访问,是一种线程保护技术,防止在写未完成的时候被另外一个线程读取,造成数据错误。
  • nonatomic:非原子性访问,不加同步, 多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。

weak 和strong的区别

  • 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

UIView和 CALayer 的联系和区别?

  • UIView可以响应事件,Layer不可以!
  • 一个 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame,同样 View 的 center和 bounds 也是返回 Layer 的一些属性。
  • UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制。

POST和GET的区别是什么?

GET
  • 提交数据不安全,数据置于请求行,客户端地址栏可见;
  • 提交的数据大小有限
  • 不可以设置书签
POST
  • 提交数据安全,数据置于消息主体内,客户端不可见
  • 提交的数据大小没有限制
  • 可以设置书签

OC可以多重继承么?

  • Objective-C 只支持单继承,如果要实现多继承的话,可以通过类别和协议的方法来实现。

进程与线程的区别?

在多线程里有


类别和扩展的区别

  • category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。

纯代码、xib和Storyboard的优缺点

手写代码
  • 优势:适合大型项目大规模使用,利于版本管理、追踪改动以及代码合并,代码重用性高
  • 劣势:速度慢,开发周期长,维护代码复杂,自动布局AutoLayout困难
xib
  • 优势:开发速度快,在版本管理上和纯代码的差异并不是很大,易读易维护
  • 劣势:xib中的设置往往并非最终设置,UI设计会被代码所覆盖
storyboard
  • 优势:可以看到每个ViewController的布局样式,也可以明确地知道各个ViewController之间的转换关系。代码量少,开发周期短
  • 劣势:多人协作较麻烦

NSNotification、delegate和KVO

Delegate,KVO和NSNotification的作用都是类与类之间的通信,与delegate不同的是:
  • 1、KVO和NSNotification都是负责发出通知,剩下的事情就不管了,所以没有返回值;
  • 2、delegate,KVO和NSNotification可以一对多。

KVO的使用

  • 被观察者发出 addObserver:forKeyPath:options:context: 方法来添加观察者。
  • 然后只要被观察者的keyPath值变化(注意:单纯改变其值不会调用此方法,只有通过getters和setters来改变值才会触发KVO),就会在观察者里调用方法observeValueForKeyPath:ofObject:change:context:
    因此观察者需要实现方法 observeValueForKeyPath:ofObject:change:context: 来对KVO发出的通知做出响应。
  • 这些代码都只需在观察者里进行实现,被观察者不用添加任何代码,所以谁要监听谁注册,然后对响应进行处理即可,使得观察者与被观察者完全解耦,运用很灵活很 简便;但是KVO只能检测类中的属性,并且属性名都是通过NSString来查找,编译器不会帮你检错和补全,纯手敲所以比较容易出错。

NSNotification的使用

  • 这里的通知不是由被观察者发出,而是由NSNotificationCenter来统一发出,而不同通知通过唯一的通知标识名notificationName来区分,标识名由发送通知的类来起。
  • 首先被观察者自己在必要的方法A里,通过方法postNotificationName:object:来发出通知notificationName这样发送通知者这边的工作就完成了,每次A被调用,就会发送一次通知notificationName。
  • 然后谁要监听A的变化,就通过[NSNotificationCenter defaultCenter]的方法addObserver:selector:name:object:为观察者注册监听name为notificationName的通知然后每次发出name为notificationName的通知时,注册监听后的观察者就会调用其自己定义的方法notificationSelector来进行响应。
  • NSNotification的特点呢,就是需要被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。

iOS中堆和栈的区别

  • 管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来讲,释放工作有程序员控制,容易产生memory Leak。

  • 申请大小:
    栈:栈是向低地址扩展的数据结构,是一块连续的内存的区域。可申请空间小。
    堆:是向高地址扩展的数据结构,是不连续的内存区域。可申请空间大。

  • 分配方式:
    堆都是动态分配的 ,动态分配由alloca函数进行分配
    栈的动态分配由编译器进行释放,无需我们手工实现


继承和类别的联系区别

  • 共同点:都是给一个类进行扩展
  • 区别:
    1.类别是对方法的扩展,不能添加成员变量。继承可以在原来父类的成员变量的基础上,添加新的成员变量
    2.类别只能添加新的方法,不能修改和删除原来的方法。继承可以增加、修改和删除方法。
    3.类别不提倡对原有的方法进行重载。继承可以通过使用super对原来方法进行重载。
    4.类别可以被继承,如果一个父类中定义了类别,那么其子类中也会继承此类别

NSArray和NSSet的区别

  • NSArray:有序的集合,存储的元素在一个整块的内存中并按序排列
  • NSSet:无序的集合,散列存储。
    如果搜索一个元素,NSSet的效率会比NSArray高。

用Block和Delegate实现回调的区别

  • delegate运行成本低,block运行成本高。
  • delegate需要把回调代码写到另一个类中,block直接把代码写在方法的后面,更加直观
  • delegate可以一对多,而block只能一对一

推荐阅读更多精彩内容

  • 上半年有段时间做了一个项目,项目中聊天界面用到了音频播放,涉及到进度条,当时做android时候处理的不太好,由于...
    DaZenD阅读 1,985评论 0 24
  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 317评论 0 4
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 23,683评论 30 465
  • 网上有篇叫“公钥,私钥,数字签名,数字证书详解”的文章很浅显易懂。 http://blog.csdn.net/su...
    FishSky阅读 1,556评论 1 3
  • 人生就是概念的使用过程! 平凡的人根本没有什么概念的积累(只是有一些粗浅的概念),而优秀的人、成功的人一定是由许多...
    风流花吹雪阅读 82评论 0 0