牛客网 iOS 题 21-41
21.Objective-C 有私有方法吗?有私有变量吗?
答案:<font color=“LightYellow”>没有私有方法,有私有变量</font>
在 interface 里定义变量默认是保护的,在 plementation 里定义变量默认是私有的
Objective-C 类里面方法只有两种:静态方法和实例方法,且支持动态解析,没有绝对的私有方法
22.category 相关
- category 可以添加新的方法;
- category 不能删除修改之前的方法;
- 可将类的实现分散到多个不同文件或多个不同框架中;
- 可创建对私有方法的前向引用。
23.Objective—C 内存管理
- 当使用 ARC 管理内存时,代码中出现 autorelease 会导致编译错误,因为 ARC 会自动插入retain, release, autorelease, dealloc 等关键字;
- autoreleasepool 在 drain 的时候会释放在其中分配的对象;
- 当使用ARC来管理内存时,在线程中大量分配对象而不用autoreleasepool则可能会造成内存泄露;
- 在使用ARC的项目中不能使用NSZone。
24.Block 作为属性在 ARC 下应该使用的语义设置为?
- retain;
- weak;
- strong;
- copy;
答案:<font color=“LightYellow”>4</font>
Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的
25.#import 和 #include 的区别 与 和 @class 的区别:
-
import 不会导致重负导入;
- @class 一般用于声明某个字符串作为类名使用,并没有导入 .h 文件中的内容,不会引起交叉编译的问题。
26.Objective-C 的类可以多重继承吗?可以实现多接口吗?Category 是什么?重写一个类的方式用继承好还是分类好?为什么?
- Objective-C 的类不可以多重继承,OC 的类只能继承自一个类;
- (因该是协议 protocol )可以遵守多个协议然后分别实现多个协议的方法;
- Category 是分类,可以为已存在的类添加方法,把不同的类方法分配到不同的分类文件中;
- 用继承重写一个类比较好。
使用分类为原有的类添加方法的时候一般会给方法名添加前缀,如果不添加前缀的话会可能重名而覆盖原有方法,这种情况下出错的话使用这个类的地方都会出现问题。使用继承的话,则只是使用这个子类的地方有问题。
27.NSNotification 和 KVO 的区别和用法是什么?实现上有什么区别?如果用 protocol 和 delegate 来实现类似的功能可能吗?会存在什么潜在问题?
-
NSNotification 和 KVO 都是观察者模式的具体实现。最特别的区别在于:
- NSNotification 拥有一个消息中心,一个全局对象,注册方法灵活,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。NSNotification可以应用于任意时间和任何对象,观察者可以有多个,
- Key-Value Observing,是Foundation框架提供的一种机制,使用KVO,可以方便地对指定对象的某个属性进行观察,当属性发生变化时,进行通知.
-
使用 protocol 和 delegate 实现:
A 对象作为被观察者,B 对象作为观察者,C 作为通知中心。C 对象需要 B 作为 delegate, 当 A 对象发生变化时,给 C 发送消息,C 筛选找到特定的 delegate 对象,尝试调用 B 注册的方法。问题:管理复杂,灵活性低。
28.设计一个自定义的 popup view,来替代系统的 alertView
29.下列正则表达式不能匹配“www.innotechx.com”的是:
^w+.w+.w+$
[w]{0,3}.[a-z]*.[a-z]+
^w.*com$
[w]{3}.[a-z]{11}.[a-z]
答案:<font color=“LightYellow”>1,4</font>
[图片上传失败...(image-842f83-1526094160744)]
30.以下代码的输出为:
NSString *str = [[NSString alloc]initWithFormat:@"%@", @"iLanou123ios"];
NSString *str1 = [str substringToIndex:3];
NSString *str2 = [str substringWithRange:NSMakeRange(6, 3)];
NSString newStr = [str1 stringAppendingString:str2];
NSLog(@"%@", newStr);
- iLanou;
- iL123;
- iLa123;
- iLaios;
答案:<font color=“LightYellow”>3</font>
str2 初始化为 str 的第6个字符开始截取3个字符的字符串
31.以下适合在客户端做数据持久化存储的数据的有
- redis;
- localStorage;
- sessionStorage;
- userData;
答案:<font color=“LightYellow”>2,4</font>
- redis 是一个开源的使用 ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value 数据库;
- localStorage:没有时间限制的数据存储;
- sessionStorage:针对一个 Session 的数据存储,生命周期为当前窗口或标签页;
- userData 常用做持久化存储,例如实现免登陆功能就是获取之前存储的用户数据实现的。
32.Objective-C 声明一个类所要用到的编译指令是
@implementation SomeClass
@autorelease SomeClass
@protocol SomeClass
@interface SomeClass
答案:<font color=“LightYellow”>3</font>
1:声明一个类的实现部分;
2:声明自动释放池;
3:声明协议;
33.同23
34.使用 Xcode 创建工程的同时支持创建版本管理库的是 Git
35.NSObject 的内省方法:
- isMemberOfClass 揭示对象的继承关系;
- isKindOfClass 揭示对象的继承关系;
- confirmsToProtocol 是否遵守某个协议;
- responseToSelector 是否实现某个方法。
36.应用 UI 卡顿的常见原因:
- 人为在 UI 线程职工做轻微耗时操作,导致 UI 线程卡顿;
- 布局 layout 过于复杂,无法在 16ms 内完成渲染;
- 同一时间动画执行的次数过多,导致 CPU 或 GPU 负载过重;
- 内存频繁触发 GC 过多(同一帧中重复创建内存),导致暂时阻塞渲染操作。
37.以下专门实现音频的方式:
- Audio Queue Services 音频队列服务
- OpenGL 跨平台的开源音频处理接口
- System Sound Service 系统声音服务
- AVAudioPlayer 高级音频播放器
38.实现自定义对象的归档必须实现的协议是NSCoding协议
NSCoding协议有两个方法:
- encodeWithCoder方法对对象的属性数据做编码处理;
- initWithCoder解码归档数据来初始化对象。
39.地图的使用中,以下哪个类或方法不是用于定位的
CLLocationAccuracy
locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArry *)locations
CLLocationManager *locationManager=[[CLLocationManager alloc]int];
CLLocationDistance
题目设置比较模糊,暂无答案
40.设计一台能制作各种口味咖啡的自动售卖机的 App 应用,可以在附近点单,然后以 App 为凭证取走咖啡。分析目标用户的常见使用场景,总结方案设计要点。
网易交互设计题
网友评论