iOS面试基础一

#父类实现深拷贝时,子类如何实现深度拷贝.父类没有实现深拷贝时,子类如何实现深度拷贝.#

<(1)深拷贝同浅拷贝的区别: 浅拷贝是指针拷贝,对一个对象进行浅拷贝, 相当于对指向对象的指针进行复制,产生一个新的指向这个对象的指针,那么就是两个指针指向同一个对象,这个对象销毁后两个指针都应该置空.深拷贝是对一个对象进行拷贝,相当于对对象进行复制,产生一个新的对象,那么就有两个指针分别指向两个对象.当一个对象改变或者被销毁后拷贝出来的新对象不受影响.

(2)实现深拷贝需要实现NSCoying协议, 实现- (id)copyWithZone:(NSZone *)zone 方法.当对一个property属性含有copy修饰符的时候, 在进行赋值操作的时候实际上就是调用这个方法.

(3)父类实现深拷贝之后, 子类只要重写copyWithZone方法, 在方法内部调用父类的copyWithZone方法,之后实现自己的属性的处理

(4)父类没有实现深拷贝, 子类除了需要对自己的属性进行处理, 还要对父类的属性进行处理.>

#KVO, NSNotification, delegate及block区别

<(1)KVO就是cocoa框架实现的观察者模式, 一般同KVC搭配使用, 通过KVO可以监测一个值的变化, 比如View的高度变化. 是一对多的关系, 一个值的变化会通知所有的观察者.

(2)NSNotification是通知, 也是一对多的使用场景. 在某些情况下, KVO和NSNotification一样的, 都是状态变化之后告知对方. NSNotification的特点, 就是需要被观察者先主动发出通知, 然后观察者注册监听后再来进行响应, 比KVO多了发送通知的一步, 但是其优 点是监听不局限于属性的变化, 还可以对多种多样的状态变化进行监听, 监听范围广, 使用也更灵活.

(3) delegate 是代理, 就是我不想做的事情交给别人做. 比如🐶需要吃🍚,就通过delegate通知主人, 主人就会给他做饭,盛饭,倒水,这些操作, 这些狗都不需要关心, 只需要调用delegate (代理人) 就可以了, 由其他类完成所需要的操作. 所以delegate是一对一关系.

(4)block是delegate的另一种形式, 是函数式编程的一种形式. 使用场景跟delegate一样, 相比delegate更灵活, 而且代理的实现更直观.

(5) KVO一般的使用场景是数据, 需求是数据变化, 比如股票价格变化, 我们一般使用KVO (观察者模式).delegate一般的使用场景是行为, 需求是需要别人帮我做一件事情, 比如买卖股票, 我们一般使用delegate.

(6)Notification 一般是进行全局通知, 比如利好消息一出, 通知大家去买入. delegate是强关联, 就是委托和代理双方互相知道, 你委托别人买股票你就需要知道经纪人, 经纪人也不知道自己的客户.Notification是弱关联, 利好消息发出, 你不需要知道是谁发出也可以做出相应的反应, 同理发消息的人也不需要知道接收的人也可以正常发出消息.>

#将一个函数在主线程执行的4种方法#

<(1) GCD方法, 通过向主线程队列发送一个block块, 使block里的方法可以在主线程中执行.dispatch_asyanc(dispatch_get_main_queue( ), ^{                                                                                

                  需要执行的方法                                                                                                                               });

(2) NSOperation 方法

NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];   主队列 

NSBlockOperation *operation = [NSBlockOperation blockOpertionWithBlock:^{

      需要执行的方法

}];

[mainQueue addOperation:operation];

(3) NSThread 方法

[self performSelector:@selector(method) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES modes:nil];

[self performSelectorOnMainThread:@selector(method) withObject:nil];

(4) RunLoop方法

[NSRunLoop mainRunLoop] performSelector:@selector(method) withObject:nil];>

#如何让计时器调用一个类方法#

<(1) 计时器只能调用实例方法,但是可以在这个实例方法里面调用静态方法.

   (2) 使用计时器需要注意, 计时器一定要加入RunLopp中, 并且选好model才能运行.scheduleTimerWithTimeInterval方法创建一个计时器并加入到RunLoop中所以可以直接使用.

   (3) 如果计时器的reoeats选择YES说明这个计时器会重复执行, 一定要在合适的时机调用计时器的invalid. 不能在dealloc中调用,因为一旦设置为repeats 为YES, 计时器会强持有self, 导致dealloc永远都不会被调用,这个类就永远无法被释放. 比如可以在viewDidDisappear中调用, 这样当类需要被回收的时候就可以正常进入dealloc中了.

[NSTimer scheduledTimerWithTimerInterval:1  target:self   selector:@selector(timerMethod )  userInfo:nil repeats:YES];

- (void)timerMethod

{       

             调用类方法

             [[self class] staticMethod];

}

- (void)invalid

{

          [timer invalid]; 

            tiemr = nil ;

}>

#如何重写类方法#

< (1) 在子类中实现一个同基类名字一样的静态方法

(2) 在调用的时候不要使用类名调用, 而是使用[self class]的方式调用. 原理, 用类名调用是早绑定, 在编译期绑定,  用[self class] 是晚绑定, 在运行时决定调用你是个方法.>

#NSTimer创建后, 会在哪个线程运行#

< (1) 用scheduledTimerWithTimerInterval创建的, 在哪个线程创建就会被加入哪个线程的RunLoop中运行在哪个线程.

(2) 自己创建的Timer, 加入到哪个线程的RunLoop中就运行在哪个线程.>

#id和NSObject *的区别#

< (1) id是一个 objc_object 结构体指针, 定义是typedef struct objc_object *id

(2) id可以理解为指向对象的指针. 所有oc的对象 id都可以指向, 编译器不会做类检查, id调用任何存在的方法都不会再编译阶段报错, 当然如果这个 id指向的对象没有这个方法, 该崩溃还是会崩溃.

(3) NSObject *指向的必须是NSObject的子类, 调用的也只能是NSObject里面的方法否则就要做强制类型转换.

(4) 不是所有的OC对象都是NSObject的子类, 还有一些是继承自NSProxy.NSObject *可以指向的类型是id的子集.>

#iOS 核心框架#

< (1) CoreAnimation

   (2) CoreGraphics

   (3) CoreLocation

   (4) AVFoundation

   (5) Foundation>

#iOS 核心机制

<(1) UITableView 的重用机制

  (2) ObjC内存管理机制; 自动释放池, ARC如何实现

  (3) RunLoop 的运行机制

  (4) RunRime 的运行机制

  (5) Block的定义  特性  内存区域  如何实现

  (6) Responder Chain

  (7) NSOperation

  (8)GCD>

#数据结构#

<(1) 8大排序算法

  (2)  二叉树实现

  (3)  二分查找实现>

#面向对象编程#

<(1) 封装.继承.多态

  (2) 设计模式6个原则

  (3) 设计一个类的功能, 如何划分类的权利 (单一职责)

  (4) 接口隔离

  (5) 如果有一个鸟类, 有飞的动作, 一个鸵鸟继承它是合适的吗(里氏替换)

  (6) 类之间的依赖如何依赖耦合度最小(依赖倒转)(高层依赖低层,低层不能依赖高层.依赖接口,不能依赖具体的类.)

  (7) 如果A要调用C函数, 但C是B的成员类, 应该如何设计? (迪米特法则)

  (8) 如何设计类, 能做到只增加代码, 而不修改代码,有哪些经验 (开放封闭)通过设计模式解决.>

#计算机技术#

<(1) 计算机网络: TCP/TP , HTTPCDN, SPDY

  (2) 计算机安全: RSA, AES, DES

  (3) 操作系统: 线程, 进程, 堆栈, 死锁, 调度算法>

#iOS新特性  新技术#

<(1) iOS7 UIDynamic , SpritKit , 新布局, 扁平化

  (2) iOS8 应用程序扩展, HealthKit, SceneKit, CoreLocation, TouchID, PhotoKit

  (3) iOS9 

  (4) Apple Watch>

#第三方库#

<(1) SDWebImage

   (2) AFNetwork

   (3) JSONKit(已经不用了)

   (4) wax>

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

推荐阅读更多精彩内容

  • 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...
    JonesCxy阅读 998评论 1 7
  • • 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向...
    WSGNSLog阅读 1,251评论 0 1
  • 1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...
    iYeso阅读 1,891评论 0 13
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,139评论 30 470
  • 今天听了宇彤老师的课,感觉受益良多。因为声音特质的原因,高冷方面的问题不是很严重,但今晚教授的练习方法还是可以让我...
    静墨琴书阅读 644评论 0 0