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

#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只能一对一

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容

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