iOS 面试题 1月14

明天第一次iOS面试,这两天看了些面试题  ,还是把有些不会的题目 记录下来

Let's go

1.self.name = @"object "  和 _name = @"object"的不同?

前者是通过点语法修改属性name, 相当于调用 setter 方法

[self setName:@"object"]

后者只是单纯的把_name 指针指向@"object"所在的地址


2.简述面向对象的特点,特别是多态

封装  ,继承   ,多态

1.封装

把客观事物封装成抽象类

优点:增强安全性和简化编程,,使用者不必了解具体细节,只需要调用外部接口,隐藏内部实现细节.加快后期开发速度.

2.继承

继承父类,拥有父类的所有方法与属性,并在此基础上扩展(无需重新编写原来的类)

优点:简化编程

3.多态

父类的指针可以指向子类的对象.OC 是的方法都是虚方法,不看指针看对象.

不同的对象以自己的响应方式响应相同的消息的能力叫做多态.

生物类(life)  有方法- eat  ,人和猪都是生物类的子类,,他们的 eat 不相同.

多态是为了实现一个目的----接口重用.(向 eat 方法的重用)

3.OC 所有对象间的交互是如何实现的?

正向:拿到接收的指针即可

反向:

1.委托代理

2.观察者模式(一对多)

3.block

4.AppDelegate (这是一个生命周期与进程一致的对象)

4.发送10个网络请求,然后再接收到所有回应之后执行后续操作,如何实现?

关于多线程,可以供 GCD 的 barrier 实现(group 同理),但用 barrier 不能使用 dispatch_get_global_queue,

dispatch_queue_t queue  queue =   dispatch_queue_create("one",DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue,^{

//111

});

dispatch_async(queue,^{

//222

});

//执行完上面两个执行下面的方法

dispatch_barrier_async(queue,^{

//在上面两个执行完之后执行

});

下面用 group 做

dispatch_queue_t queue = dispatch_get_global_queue(0,0);

dispatch_group_t groupQueue = dispatch_group_create();

dispatch_group_async(groupQueue,queue,^{

//111

});

dispatch_group_async(groupQueue,queue,^{

//222

});

dispatch_group_notify(groupQueue,queue,^{

//上面执行完了 执行这个

});

4.不同版本的 app ,数据库结构变化了,如何处理

如果是移动端,很简单,最暴力的方法 只需要把原先的数据库删了,导入新的数据库文件即可.

如果是客户端,那是客户端的问题,根 iOS 移动端开发没多大关系,,,需要与客户端开发者沟通,,毕竟项目是多人合作才能完成的.


5.定义一个 block ,接收参数与返回值为 int 型,其他随意

typedef  int (^myBlock)(int  a, int b);

myBlock  firstBlock;

firstBlock = ^(int a,int b){

};

6.堆和栈的区别

这个要说可以说很多啊

简单来说:

堆 :程序员手动申请,程序员手动释放  ,遵守黄金法则,谁申请,谁释放.

栈:编译器自动申请,自动释放..一种先进后出的数据结构

7.关于 UITableviewCell 的重用机制

通过重用单元格来节省内存

为每个 cell 指定一个重用标示符.

例子:假如一个 tableView 有十个 cell, 但一开始显示4个,系统一开始只分配了4个 cell 的内存,,当滚动的时候, 屏幕内显示的单元格重复使用这四个内存.

8.简单地说 sizeClass 的作用

sizeClass 是 iOS8之后出现的,,与 autoLayout 配合解决所有ios 设备屏幕尺寸以及旋转时的 UI 适配.

例子:sizeClass 可以做到一个 button ,在竖屏的时候,放在左上角,,而当横屏的时候,出现在右上角.

9.写出一个 update 语句,修改 User 表中 id 等于4的 UserName 值为张三

update User set UserName = '张三'  where id = 4

insert into student(name, age) values ('Jonny',19)

create table if not exists student (id integer primary key,name text,age integer)

select * from student where name = 'maggie'

10.nil ,Nil,NULL,NSNULL

nil: 空的对象

Nil: 空的类 

NULL: 指C 里面的变量(NSInteger ,CGFloat)

NSNULL: 空的集合

11.写出至少三个使用单例模式的系统类

NSUserDefault

NSFileManager

UIAPPlication

NSNotificationCenter

NSFileHandle

12.json 语法规则

json 是轻量级数据交换格式,写出 json 的例子甩他一脸

{} [] 都是对应的  

{

"key" : "value"

"name":"zhang",

"age":19,

"lovers":[

"1号",

"2号",

"3号"

]

}

13.如何实现图文混排

1.webView 拼接 html 可以实现

2.iOS sdk中为我们提供了一套完善的文字排版开发组件:CoreText。CoreText库中提供了很多的工具来对文本进行操作,例如CTFont、CTLine、CTFrame等。利用这些工具可以对文字字体每一行每一段落进行操作。

14.自动登录的逻辑

当用户勾选了自动登录  ,每次到登录页面 ,去 UserDefault 中取得用户名和密码(加密过的),然后发送登录请求即可

15.应用间跳转用到的关键参数是什么

scheme   myApp:// ?参数1= 1&参数2 =2   自定义协议

16.assign vs weak  和 __block vs __weak

assign 指的是基本变量 (NSINteger 或 CGFloat),

weak 指的是对象 ,调用 setter 方法时,,引用计数不加1

__block :block 可以访问局部变量,但不能修噶i,要是局部变量定义了__ block 就可以修改了.

__weak: 是弱引用,调用 setter 时,引用计数不加1.当 self 释放时. 在 block 中使用可以防止循环引用. __weak typeof (self) weakSelf = self;


17尽可能写出 NSObject 类包含的方法

description

alloc

dealloc

NSStringFromClass

NSSelectorFromString

responseToSelector

 isKindOf

isMemberOf

18.iOS 单元测试框架有哪些

Xcode 自带的XCTest和第三方的GHUnit

19.CALayer 和 UIView 区别

UIView 是iOS 上 所有界面元素基类. 它本身是由 CoreAnimation实现的.而真正的绘图部分,是由 CALayer 的类来管理的. UIView 本身更像是一个 CALayer 的管理类,实现 UIView ,内部都是在访问CALayer的相关属性.

实现圆角

 view.layer.cornerRadius = 17;

view.layer.borderWith = 10;

[view.layer maskToBounds]

20.沙盒的目录结构是怎么样的?用于什么场合?

1.bundle 容器(只读)

MyAPP.app

2.data 容器(可读可写)

1.Document :苹果建议键程序中创建或浏览的文件放在这里 ,iTunes 会同步

2.Library:( Library/cache ,Library/Preferences/xxx.plist)缓存文件,iTunes 不会同步

3.Tmp:创建和存放临时文件的地方,会删除。


21.多线程的几种方式

pThread,NSThread ,GCD NSOperation

pThread纯C 可以跨平台. 说明兼容性好, 缺点 对于某个平台 优化型不强

NSThread:

NSThread苹果早期的多线程技术- 已经被淘汰了

//最高度自定义化的 也是最难写的 一般不用  NSLock 会用到

GCD: 最流行写的

同步:同与主线程,在主线程上运行sync

异步:异于主线程,在非主线程上运行async

并行:多个任务同时进行,即多个任务在不同的线程运行concurrent

串行:多个任务在一个线程上排队运行,有序的serial


NSOperation 就是对GCD的一个封装OC 把C语法封装成了OC语法.额外的添加了5个特殊功能

任务的创建主要使用:NSBlockOperation

关于Operation 比GCD多的功能

1.可以限制最大的线程执行数—并发数

例如:可以同时下载5个文件:有10个文件, 开始下载5个,当第一个完成, 第6个会补充进来

2.暂停线程(已执行任务无效)

3.取消当前线程 (已执行任务无效)

5.取消某个任务的执行,

22.KVO and KVC ?有什么作用

kvo 键值观察模式,为一个属性添加观察,,当属性改变时,做出相应动作,,简化了编码

Key-Value Observing (KVO) 建立在 KVC 之上,它能够观察一个对象的 KVC key value 值的变化。


KVC 键值编码模式,,通过字符串访问对象的属性,做到 OC 做不到的事.

setValue for key    解析 json 时会用到  setValuesForKeyWithDictionary, 大大减少代码量

[persion valueForKeyPath:@"phone.battery" ]

[persion setValue:@"hufeng"forKey:@"name"];

23.同步请求和异步请求什么区别?

同步:都在主线程中执行.

异步:在分线程中执行,可以一起执行.

24.单例是什么 ?什么时候使用

在整个程序中只创建一次,只用同一块内存.

如何多个模块都要使用同一个变量,那这个变量可以升为单例.

如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间

static Person *p;

dispatch_once_t onceToken;

dispatch_once(&onceToken,^{

p = [[Person alloc]init];

});


25.OC中创建线程的方法有哪些?如果想延时执行代码,方法是什么?

NSThread*thread = [[NSThreadalloc]initWithTarget:selfselector:@selector(startLongTimeWork:)object:nil];

//需要手动开启线程

[threadstart];

dispatch_queue_tqueue =dispatch_queue_create("AsyncConcurrent",DISPATCH_QUEUE_CONCURRENT);

//新式写法---使用block来创建操作/任务

NSBlockOperation*op3 = [NSBlockOperationblockOperationWithBlock:^{

[selfprintMinus];

}];

//如果想让代码在主队列里有序执行

[[NSOperationQueuemainQueue]addOperation:op3];

//让op3和op4在多线程(非主)中并行

NSOperationQueue*queue1 = [NSOperationQueuenew];

//[queue1 addOperation:op3];

延时:

1.self performSelector:() withObject:<> afterDelay:

2.[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

3.[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];

4.GCD//  when 时间 从现在开始经过多少纳秒

dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0* NSEC_PER_SEC));

void(^task)() = ^ {

// 延迟操作执行的代码

NSLog(@"%@", [NSThread currentThread]);

};

// 经过多少纳秒,由主队列调度任务异步执行

dispatch_after(when, dispatch_get_main_queue(), task);

// 先执行就是异步,后执行就是同步

NSLog(@"come here");


26.OC 的类可以多重继承么?可以实现多个接口么?Category 是什么?重写一个类的方法用继承好还是分类好?为什么?

不能多继承   .

可以通过定义多个协议 实现多个接口

category 是分类 ,为已经存在的类添加额外的犯法,扩展是没有名字的分类.

分类只能扩充方法,一般情况下不能扩展属性和成员变量(用 runtime 机制可以在分类中添加属性).而扩展可以.扩展都是私有的..如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现。


建议使用分类,,继承a is a b的关系,而分类只需要满足a has a b的关系,局限性小..

 比较灵活,不用定义子类就能添加方法  ,仅对本 category 有效 ,不会影响其他类与原有类的关系,耦合度小.,

例子:继承 你需要调用子类 才能使用这个方法,,而分类 你直接可以用原类就能调用这个方法.简单了很多.


27.SDWebImage 原理   AFNetWorking 原理

SDWebImage:下载图片,现在 Document中创建一个文件,请求图片资源, 用 NSFileHandle 把接收到的 data 写入这个文件,,下载完毕后, 显示这个图片..在没下载完之前,可以显示 placeholder 中的图片:

AFNetWorking:封装了 请求网络的方法

实际上封装了NSURLSessionConfiguration . NSURLSession. NSURLSessionDataTask

NSURLSessionConfiguration*configuration = [NSURLSessionConfigurationdefaultSessionConfiguration];

//第三个参数为nil,默认就是子线程

NSURLSession *session = [NSURL SessionsessionWithConfiguration: configuration delegate: self delegateQueue: nil];

NSURLSessionDataTask *task = [session dataTaskWithRequest:request];

[task resume];

28.app 的生命周期

1.willFinishLaunching  准备启动

2.didFinishLaunching  启动

3. didBecomeActive    活动状态

4.willResignActive     将要进入非活动状态

5.DidEnterBackground   进入后台

6.willEnterForeground  进入前台

7.willTerminate  将要退出


29.NSInteger 和 int 的区别

在64位系统操作上,NSInteger 是 C语言的long 类型, 在32位系统上,则是 int 类型.

30.runtime

运行时:直到运行时才确定类的类型.

动态的添加方法 和实力变量  .比如可以在 category 中通过运行时机制 添加属性.

31.国际化

project 找到 Localization  ,点击+号,添加想要支持的语言.

通过新建 Strings文件.  键值对  ,同一个key 在不同语言的文件中值不一样.

调用 NSLocalizedStringFormTable 通过 key ,获得 ios 设备语言对应的字符.

32.实现线程同步?

@synthronized(){}  添加同步锁

NSLock

dispatch_async(dispatch_get_main_queue(),^{})  异步主线程

NSOperationQueue :添加依赖,,,设置最大并发数为1.


累死我了   等我面完试,再壮大这个内容,,成为面霸!!!

职业发展:

因为我现在做的是iOS ,所以近几年 肯定是往移动开发这方面 发展的,,我打算在做 iOS 的同时 ,去自学 Android. 到时学好这两个 ,开发起来更方便...

过几年之后, 等我有一定代码量,,我觉得我会往架构师发展,, 因为我觉得架构是一个项目最重要的部分,,好的架构才能有好的项目.

碰到困难,放弃了怎么办  你怎么看:

我认为没有一项工作时没有困难的,,如果碰到困难,想尽一切办法解决它,我相信没有解决不了的困难,,只是看能不能坚持而已..

那些碰到困难就退缩的人是还没有准备好工作的...

兴趣没了 就放弃了 你怎么看:

我选择这个行业 ,我认为是一半为了兴趣,(因为我确实很喜欢苹果的东西),还有一半是为了生活...我相信没有百分之百的兴趣,工作中肯定会遇到很多困难让你觉得其实这个也不是想象的那么好玩  , 能坚持下来都是靠自己的意志   去解决一个又一个的困难的...

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

推荐阅读更多精彩内容

  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 784评论 0 3
  • 原文地址 http://www.cnblogs.com/kenshincui/p/3983982.html 大家都...
    怎样m阅读 1,263评论 0 1
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,344评论 0 35
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,121评论 29 470
  • 今天是3月29号嘛,武汉天气很好。 今天是我们在一起的51天。 昨天发生了一些事情。 有个朋友退群了。我有点烦。毕...
    Geheimnis_阅读 409评论 0 0