2026年程序员ObjectiveC面试题及答案.docxVIP

  • 0
  • 0
  • 约4.56千字
  • 约 11页
  • 2026-02-06 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年程序员ObjectiveC面试题及答案

一、选择题(共5题,每题2分)

1.以下哪个关键字用于声明一个类的方法是静态的?

A.`+`

B.`-`

C.`@property`

D.`@interface`

答案:A

解析:在Objective-C中,类方法使用`+`前缀声明,表示该方法属于类本身而非实例。`-`前缀用于实例方法,`@property`用于声明属性,`@interface`用于定义接口。

2.下列哪个方法用于释放对象并等待垃圾回收器回收?

A.`retain`

B.`release`

C.`autorelease`

D.`dealloc`

答案:B

解析:`retain`增加引用计数,`release`减少引用计数并释放对象,`autorelease`将对象放入自动释放池,`dealloc`是析构方法。释放对象时直接调用`release`。

3.Objective-C中,以下哪种方式可以避免重复代码?

A.分类(Category)

B.扩展(Extension)

C.代理(Delegate)

D.继承

答案:A

解析:分类允许在不修改原有类的情况下添加新方法,扩展允许添加私有成员,代理用于对象间通信,继承用于代码复用。分类最适合避免重复代码。

4.以下哪个方法用于遍历集合中的所有元素?

A.`forEach:`

B.`map:`

C.`filter:`

D.`reduce:`

答案:A

解析:`forEach:`用于遍历,`map:`用于转换,`filter:`用于筛选,`reduce:`用于合并。Objective-C的集合(如`NSArray`)支持`forEach:`。

5.以下哪个关键字用于声明一个块(Block)捕获外部变量是强引用?

A.`__weak`

B.`__strong`

C.`__block`

D.`__unsafe_unretained`

答案:B

解析:`__strong`表示强引用,`__weak`表示弱引用,`__block`用于捕获变量,`__unsafe_unretained`表示不保留引用。块默认捕获外部变量为强引用。

二、简答题(共3题,每题5分)

1.简述Objective-C中的消息发送机制。

答案:Objective-C的消息发送机制通过消息转发实现。对象接收到消息时,会先在自身方法列表中查找,找不到则调用`objc_msgSend`查找类的方法,若仍找不到,则调用`objc_msgSendStudly`(旧版)或`objc_msgSendSuper`查找父类方法。若所有方法均未找到,则触发消息转发机制,包括`forwardMessage:`、`forwardInvocation:`等回调。

解析:Objective-C的消息发送不是函数调用,而是运行时动态解析。消息发送过程涉及`objc_msgSend`等内部函数,确保了动态绑定和运行时扩展性。

2.解释Objective-C中的属性(Property)及其四种存取方式。

答案:属性是Objective-C的语法糖,简化了属性访问和内存管理。四种存取方式:

-`nonatomic`:非原子性,多线程下不保证线程安全。

-`copy`:返回新副本,适用于对象类型,防止外部分析引用。

-`assign`:直接赋值,适用于基本类型或非对象类型。

-`strong`:强引用,适用于对象类型,不释放对象。

解析:属性通过`@property`声明,编译器自动生成`setter`和`getter`。`nonatomic`提升性能,`copy`防止循环引用,`assign`避免对象释放问题,`strong`是默认行为。

3.描述Objective-C中的代理(Delegate)模式及其使用场景。

答案:代理模式通过协议(Protocol)定义接口,由委托对象实现协议,主对象通过弱引用(`__weak`)持有委托对象,实现解耦。使用场景包括:

-UI事件处理(如`UITableViewDelegate`)。

-事件通知(如`NSNotificationCenter`)。

-避免直接依赖具体实现。

解析:代理模式通过协议解耦,适用于事件处理和跨模块通信。弱引用防止循环引用,提升内存安全性。

三、编程题(共2题,每题10分)

1.编写Objective-C代码,实现一个单例模式类,要求懒加载且线程安全。

答案:

objective-c

@interfaceSingletons:NSObject

+(Singletons)sharedInstance;

@end

@implementationSing

文档评论(0)

1亿VIP精品文档

相关文档