17.07月面试问题

1.封装网络请求
好处:可以降低网络请求方法与控制器的耦合度,即使网络使用第三方框架发生不兼容,错误等问题从而想换框架时,也不用到每个控制器里面改代码;建立单例工具类,方便管理。优化代码结构。

1.有没有用过多线程,解释下多线程?
多线程的作用是:可以解决负载均衡问题,充分利用cpu资源,为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而互不干扰。
大多情况下,要用到多线程的主要是需要大量的io操作时,或处理的情况需要花大量的时间等等,比如读写文件、视频图像的采集、处理、显示、保存等。

缺点:大量的线程降低代码的可读性、更多的线程需要更多的内存空间。当多线程对一个资源出现争夺的时候要注意线程安全的问题。

iOS有三种方法:1.NSThead,2.NSOperation、GCD
1.NSThead:相比其他两个要轻量级,但是需要手动管理线程的生命周期,线程同步。
2.NSOperation:
2.线程同步的方法
1.@synthsize 3.并行
2.NSLock :同步代码块 上锁

AVPlayer来实现播放
AVPlayerItem负责提供视频信息,AVPlayer负责管理和调控,AVPlayerLayer显示视频,
首先:得到视频的URL
根据URL创建AVPlayerItem。
把AVPlayer提供个AVPlayer
AVPlayerLayer显示视频。AVPlayer控制视频,播放,暂停,跳转等。

1.assign可以修饰OC对象么?

答案:assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针。

2.delegate的生命周期
3.A跳转BB跳转C 他们之间的传值你用什么方法传?属性还是代理
4.关于TableView的内存优化

1.正确地使用Cell的重用机制
2.提前计算好cell的高度和布局
UITableView的回调顺序是先多次调用tableView:heightForRowAtIndexPath:用来确定contentsize及cell的位置,然后才会调用tableView:cellForRowAtIndexPath:,从而来显示当前屏幕的cell。
iOS9会更厉害,还会华东边调用tableView:heightForRowIndexPath:,可见这个方法里一定不会重复进行大量的计算。我们应该提前计算好车cell的高度并且缓存起来,在回调时直接把高度值直接返回。
3.避免阻塞主线程
很多时候我们需要从网络请求图片等,把这些操作放在后台操作,并且缓存起来
4.按需加载
5.减少subviews的数量
6.尽可能重用开销比较大的对象
NSDateFormatterNSCalendar等对象初始化非常慢,我们可以把它加入类的属性中,或者创建单例来使用
7.圆角、阴影之类的全部bitmap化,或者放到后台draw好了再拿出来(离屏渲染)
解决方法:
1.开启CALayer.shouldRasterize ,转嫁到CPU上;
2.粗暴画图/截图实现border和圆角;
8.不要动态的添加或者移除子控件

如果是较大或者不常用的图片资源,采用imageWithContentsOfFile:。

5.ARC下关于内存泄露都有哪些?

1.block的循环引用
2.NSTimer
在使用NSTimer addtarget,为了防止target被释放而导致的程序异常,timer会持有target。
解决方法:使用invalidate方法消掉timer。
3performSelector系列

6.A push b b push c为了防止内存泄露可以做哪些?
7.单例模式是什么?优缺点

单例模式就是只有一个实例,确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。并提供一个全局访问点去访问它。
优点:
1.提供了对唯一实例的受控访问;
2.由于系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要凭和销毁的对象单例模式无疑可以系统的性能
缺点:
1.不可以扩展
2,滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出,如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态丢失。

8.属性跟成员变量的区别

1.属性对成员变量扩充了存取方法
2.属性默认会生带下划线的成员变量

9.imageNamed和imageWithContentsOfFile

这个知道的人比较多,因为缓存图片的消耗通常是肉眼可见的多。
常用的元素例如icon之类的,采用imageNamed:,系统会有缓存。

10.归档有哪些方法?

1.plist
2.NSUsererDefaults

NSUsererDefaults可以保持个nil么?可以

12

上拉刷新下拉加载的实现原理

1.下拉刷新实际上是监测UIScrollView的contentOffset的Y值,当他往下拉动时,UIScrollView的contentOffset是一个减小的,然后把通过动画把它的contentInset值控制成一个定值,然后通过设置延时把UIScrollView的contentInset的值恢复到原点。
2.上拉加载其实原理和下拉刷新基本是一样的,只不过判断的contentOffset的值不同,如果scrollView.bounds.size.height+scrollView.contentOffset.y>scrollView.contentSize.height,说明你执行了上拉操作。

block的实现一个带参数的
获取2个数的最大公约数。或者最小公倍数

最大公约数的两个算法

有两整数a和b:

① a%b得余数c

② 若c=0,则b即为两数的最大公约数

③ 若c≠0,则a=b,b=c,再回去执行①
OC

//相除法
-(NSInteger)commonNumber{
    NSInteger fenzi = a>b ? a: b;
    for (NSInteger i = fenzi; i>=0; i--) {
        if (a%i==0&b%i==0) {
            return i;
        }
    }
    
    return 1;
}

swift(不会用swift的for循环从大到小,怪折腾的...)

   func ssCommonNumber()->NSInteger
    {
        var a = NSInteger()
        
        var b = NSInteger()
        a = 12
        b = 18
        var fenzi = NSInteger()
        fenzi = a > b ? a : b
        
        for i in ((0 + 1)...fenzi).reversed() {
            
            let c = a % i
            let d = b % i
            if (c == 0) && (d == 0){
                return i
            }
        }
        
        return 1
    }

有两整数a和b:

① 若a>b,则a=a-b

② 若a<b,则b=b-a

③ 若a=b,则a(或b)即为两数的最大公约数

④ 若a≠b,则再回去执行①
OC

//相减法
-(void)addWithCommonNumber{
    
    while (a!=b) {
        if (a>b) {
            a = a-b;
        }else{
            b = b- a;
        }
    }
    NSLog(@"相减法得到最大公约数是:%ld",a);
    
}

swift

    func CommonNumber()->NSInteger
    {
        var a = NSInteger()
        
        var b = NSInteger()
        a = 12
        b = 18
        while a != b {
            if a>b {
                a=a - b
                
            }else{
                b = b - a;
            }
        }
        return a;
    }

最小公倍数

两个数相乘除以最大公约数就是最小公倍数

MVC、MVVM、MVP的区别

models-负责主要的数据或者操作数据的数据访问层
views-负责展示层
contorller、presenter、ViewModel-负责协调model和view,通常会根据用户在view上的动作在model上作出对应的更改,同时将更改的信息返回到view上。
MVC优缺点
苹果官方给出的优缺点
优点:
1.同时开发-多个开发人员可以在模型,控制器和视图上同时工作。
2.高凝聚力-MVC可以在控制器上进行相关的动作的逻辑分组。特定模型的视图也会分组在一起
3.低耦合-MVC框架的本质就是模型、视图或控制器之间的耦合度较低
4.易于修改-由于责任分离,未来的开发或修改更容易
5.模型的多个视图-模型可以有多个视图

缺点:
1.代码导航-框架导航可能是复杂的,因为它引入了新的抽象层,并要求用户适应MVC的分解标准。
2.多工件一致性-将一个特性分解为三个工件导致散射,因此,要求开放人员一次维护多个表示的一致性。
3.显著的学习曲线-多种技术的支持成为标准。使用mvc的开发人员需要精通多种技术。

工厂模式

其实就是创建对象

UIButton到NSObject的类

UIButton->UIControl->UIView->UIReponder->NSObject

category为什么不能添加属性?

一个类中用@property声明属性。编译器会自动帮我们生成成员变量和setter/getter,单分类的指针结构体中,根本没有属性列表,所以分类中用@property声明属性,既无法生产成员变量也无法生成setter/getter。
因为OC是动态语言,方法真正的实现是通过runtime完成的,我们可以通过runtime手动添加setter/getter方法。

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,561评论 18 139
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    不懂后悔阅读 823评论 0 53
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,157评论 11 349
  • 记得很久以前QQ盛行的时候,我很喜欢发空间文章转载,过不了了多久文章下方会有点赞或者评论,再后来说说用的多了,我就...
    日槿阅读 241评论 1 0