牛客网 iOS 题 21-41

牛客网 iOS 题 21-41

21.Objective-C 有私有方法吗?有私有变量吗?

答案:没有私有方法,有私有变量

在 interface 里定义变量默认是保护的,在 plementation 里定义变量默认是私有的
Objective-C 类里面方法只有两种:静态方法和实例方法,且支持动态解析,没有绝对的私有方法

22.category 相关

  1. category 可以添加新的方法;
  2. category 不能删除修改之前的方法;
  3. 可将类的实现分散到多个不同文件或多个不同框架中;
  4. 可创建对私有方法的前向引用。

23.Objective—C 内存管理

  1. 当使用 ARC 管理内存时,代码中出现 autorelease 会导致编译错误,因为 ARC 会自动插入retain, release, autorelease, dealloc 等关键字;
  2. autoreleasepool 在 drain 的时候会释放在其中分配的对象;
  3. 当使用ARC来管理内存时,在线程中大量分配对象而不用autoreleasepool则可能会造成内存泄露;
  4. 在使用ARC的项目中不能使用NSZone。

24.Block 作为属性在 ARC 下应该使用的语义设置为?

  1. retain;
  2. weak;
  3. strong;
  4. copy;

答案:4

Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的

25.#import 和 #include 的区别 与 和 @class 的区别:

  1. import 不会导致重负导入;

  2. @class 一般用于声明某个字符串作为类名使用,并没有导入 .h 文件中的内容,不会引起交叉编译的问题。

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

  1. Objective-C 的类不可以多重继承,OC 的类只能继承自一个类;
  2. (因该是协议 protocol )可以遵守多个协议然后分别实现多个协议的方法;
  3. Category 是分类,可以为已存在的类添加方法,把不同的类方法分配到不同的分类文件中;
  4. 用继承重写一个类比较好。

使用分类为原有的类添加方法的时候一般会给方法名添加前缀,如果不添加前缀的话会可能重名而覆盖原有方法,这种情况下出错的话使用这个类的地方都会出现问题。使用继承的话,则只是使用这个子类的地方有问题。

27.NSNotification 和 KVO 的区别和用法是什么?实现上有什么区别?如果用 protocol 和 delegate 来实现类似的功能可能吗?会存在什么潜在问题?

  1. NSNotification 和 KVO 都是观察者模式的具体实现。最特别的区别在于:

    1. NSNotification 拥有一个消息中心,一个全局对象,注册方法灵活,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。NSNotification可以应用于任意时间和任何对象,观察者可以有多个,
    2. Key-Value Observing,是Foundation框架提供的一种机制,使用KVO,可以方便地对指定对象的某个属性进行观察,当属性发生变化时,进行通知.
  2. 使用 protocol 和 delegate 实现:
    A 对象作为被观察者,B 对象作为观察者,C 作为通知中心。C 对象需要 B 作为 delegate, 当 A 对象发生变化时,给 C 发送消息,C 筛选找到特定的 delegate 对象,尝试调用 B 注册的方法。

    问题:管理复杂,灵活性低。

28.设计一个自定义的 popup view,来替代系统的 alertView

参考MMPopupView

29.下列正则表达式不能匹配“www.innotechx.com”的是:

  1. ^w+.w+.w+$
  2. [w]{0,3}.[a-z]*.[a-z]+
  3. ^w.*com$
  4. [w]{3}.[a-z]{11}.[a-z]

答案:1,4
[图片上传失败...(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);
  1. iLanou;
  2. iL123;
  3. iLa123;
  4. iLaios;

答案:3

str2 初始化为 str 的第6个字符开始截取3个字符的字符串

31.以下适合在客户端做数据持久化存储的数据的有

  1. redis;
  2. localStorage;
  3. sessionStorage;
  4. userData;

答案:2,4

  1. redis 是一个开源的使用 ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value 数据库;
  2. localStorage:没有时间限制的数据存储;
  3. sessionStorage:针对一个 Session 的数据存储,生命周期为当前窗口或标签页;
  4. userData 常用做持久化存储,例如实现免登陆功能就是获取之前存储的用户数据实现的。

32.Objective-C 声明一个类所要用到的编译指令是

  1. @implementation SomeClass
  2. @autorelease SomeClass
  3. @protocol SomeClass
  4. @interface SomeClass

答案:3

1:声明一个类的实现部分;
2:声明自动释放池;
3:声明协议;

33.同23

34.使用 Xcode 创建工程的同时支持创建版本管理库的是 Git

35.NSObject 的内省方法:

  1. isMemberOfClass 揭示对象的继承关系;
  2. isKindOfClass 揭示对象的继承关系;
  3. confirmsToProtocol 是否遵守某个协议;
  4. responseToSelector 是否实现某个方法。

36.应用 UI 卡顿的常见原因:

  1. 人为在 UI 线程职工做轻微耗时操作,导致 UI 线程卡顿;
  2. 布局 layout 过于复杂,无法在 16ms 内完成渲染;
  3. 同一时间动画执行的次数过多,导致 CPU 或 GPU 负载过重;
  4. 内存频繁触发 GC 过多(同一帧中重复创建内存),导致暂时阻塞渲染操作。

37.以下专门实现音频的方式:

  1. Audio Queue Services 音频队列服务
  2. OpenGL 跨平台的开源音频处理接口
  3. System Sound Service 系统声音服务
  4. AVAudioPlayer 高级音频播放器

38.实现自定义对象的归档必须实现的协议是NSCoding协议

NSCoding协议有两个方法:

  1. encodeWithCoder方法对对象的属性数据做编码处理;
  2. initWithCoder解码归档数据来初始化对象。

39.地图的使用中,以下哪个类或方法不是用于定位的

  1. CLLocationAccuracy
  2. locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArry *)locations
  3. CLLocationManager *locationManager=[[CLLocationManager alloc]int];
  4. CLLocationDistance

题目设置比较模糊,暂无答案

40.设计一台能制作各种口味咖啡的自动售卖机的 App 应用,可以在附近点单,然后以 App 为凭证取走咖啡。分析目标用户的常见使用场景,总结方案设计要点。

网易交互设计题

41.同40

你可能感兴趣的:(牛客网 iOS 题 21-41)