IOS基础面试题

news/2025/2/25 12:10:47

1. 什么是MVC?

MVC(Model-View-Controller)是一种常见的设计模式,用于组织代码

  • Model(模型): 代表数据层,处理数据的逻辑。
  • View(视图): 负责展示界面,显示数据。
  • Controller(控制器): 连接Model和View,处理视图的更新以及用户交互。

2. 什么是Delegate?

Delegate是iOS中一种常用的设计模式,用于对象之间的通信。一个对象通过delegate(委托)将某些任务或事件的处理委托给另一个对象。常用于处理UI事件(如UITableViewDelegate)。

3. Swift中的optional是什么?

Optional是Swift中的一种数据类型,它表示变量可以有值或者没有值(nil)。Optional在Swift中用?表示,如var name: String?。当你声明一个Optional时,它可以被赋值为nil。

4. 什么是ARC(Automatic Reference Counting)?

ARC是一种自动内存管理机制,用于管理对象的生命周期。它通过在代码中追踪对象的引用计数来决定何时释放对象。当引用计数为0时,ARC自动销毁对象。

5. Swift中的闭包是什么?

闭包是自包含的代码块,可以在代码中传递和使用。闭包可以捕获和存储其周围上下文中的变量和常量。闭包分为全局函数、嵌套函数和闭包表达式。

6. 什么是KVC(Key-Value Coding)?

KVC是一种在Objective-C中使用的机制,允许通过字符串键来访问对象的属性。它使得对象的属性可以在运行时被动态地访问和修改。

7. 什么是KVO(Key-Value Observing)?

KVO是一种允许对象观察另一个对象属性变化的机制。通过KVO,当某个属性值发生变化时,观察者会收到通知。

8. UITableView和UICollectionView有什么区别?

UITableView: 用于显示单列的垂直列表。
UICollectionView: 用于显示网格布局,可以支持更灵活的布局,适用于多列、多行、横向或纵向布局。

9. 什么是Swift中的协议(Protocol)?

协议定义了一组方法和属性要求,可以被类、结构体或枚举实现。协议是一种接口定义,不包含具体实现。

10. 如何防止ARC中的循环引用?

循环引用发生在两个对象互相持有对方的引用时,从而无法释放。通过使用weak或unowned修饰符来避免循环引用。weak适用于可为nil的引用,而unowned适用于非nil的引用。

11. 什么是GCD(Grand Central Dispatch)?

GCD是苹果提供的并发编程技术,帮助开发者更轻松地实现多线程。它通过任务队列管理不同的线程,使得任务的调度和执行更加高效。

12. 什么是RunLoop?

答案:
RunLoop是iOS中用于处理事件的循环机制。它持续监听并调度事件(如UI事件、网络请求等)。当有事件发生时,RunLoop会处理事件并调用相关的回调方法。

enum MyError: Error {
    case somethingWentWrong
}

func throwError() throws {
    throw MyError.somethingWentWrong
}

do {
    try throwError()
} catch {
    print("Error: \(error)")
}

14. 什么是App的生命周期?

iOS应用的生命周期包括从启动到退出的整个过程。常见的生命周期方法有:

  • application(_:didFinishLaunchingWithOptions:):应用启动时调用。
  • applicationDidEnterBackground(_:):应用进入后台时调用。
  • applicationWillEnterForeground(_:):应用从后台进入前台时调用。
  • applicationWillTerminate(_:):应用即将终止时调用。

15. Swift中如何定义一个枚举?

枚举使用enum关键字定义。可以为每个枚举成员指定关联值或原始值。

enum Direction {
    case north
    case south
    case east
    case west
}

16. 如何优化UITableView的性能?

使用reuseIdentifier来重用UITableViewCell。
延迟加载(Lazy Loading)图片或资源。
使用dispatch_async来异步加载数据。
开启tableView.estimatedRowHeight来提高滚动流畅度。

17. 什么是Swift中的类型推断?

Swift会根据你赋值给变量的值自动推断变量的类型。例如,let num = 10,Swift会推断numInt类型。

18. 什么是iOS中的App Sandbox?

App Sandbox是一种安全机制,限制应用对设备上资源的访问。它确保应用只能访问它需要的文件和数据,防止对系统或其他应用的非法访问。

19. 如何在iOS中进行网络请求?

可以使用URLSession进行网络请求。

let url = URL(string: "https://api.example.com")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
    // 处理数据
}
task.resume()

20. 如何在Swift中定义一个类?

使用class关键字定义类。类可以有属性、方法和初始化器。

class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func greet() {
        print("Hello, my name is \(name).")
    }
}


http://www.niftyadmin.cn/n/5865481.html

相关文章

vue2.x 中父组件通过props向子组件传递数据详细解读

1. 父组件向子组件传递数据的步骤 在子组件中定义 props: 子组件通过 props 选项声明它期望接收的数据。props 可以是数组形式(简单声明)或对象形式(支持类型检查和默认值)。 在父组件中使用子组件时绑定 props&#x…

Mac下VSCode调试skynet的lua环境配置

Mac下VSCode调试skynet的lua环境配置 安装Lua5.4安装Luasocket下载LuaPanda.lua安装VScode LuaPanda插件配置skynet,在lua_cpath引入luasocket库创建launch.json在需要调试的lua文件里面添加代码 安装Lua5.4 brew install lua5.4安装Luasocket LuaPanda需要luasoc…

IO进程 day05

IO进程 day05 9. 进程9. 9. 守护进程守护进程的特点守护进程创建步骤 10. 线程10.1. 线程的概念10.2. 进程和线程的区别10.2. 线程资源10.3. 线程的函数接口1. pthread_create-创建线程线程函数和普通函数的区别 2. pthread_exit3.线程资源回收函数join和detach的区别 获取线程…

Flink API 解析 Flink Job 依赖的checkpoint 路径

引言 之前写一篇 Python 脚本解析 Flink _metadata 中依赖的 checkpoint 路径文章 Python解析 Flink Job 依赖的checkpoint 路径 ,代码比较暴力,直接按照 checkpoint 路径前缀判断,最近发现网上有通过 Flink API 解析 Flink Checkpoint 元数…

【JavaEE进阶】Spring Boot配置文件

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 SpringBoot配置⽂件 举例: 通过配置文件修改端口号 配置⽂件的格式 properties基本语法 读取配置⽂件 properties配置文件的缺点 yml配置⽂件 yml基本语法 yml和proper…

【搭建SigNoz性能监控平台】在Ubuntu上快速搭建高效的SigNoz性能监控平台与远程使用技巧

文章目录 前言1.关于SigNoz2.本地部署SigNoz3.SigNoz简单使用4. 安装内网穿透5.配置SigNoz公网地址6. 配置固定公网地址 前言 本文介绍如何在Ubuntu系统上使用 Docker 快速部署一款强大的应用性能监控工具SigNoz,并结合cpolar内网穿透工具轻松实现异地远程使用。 …

插入排序:一种简单而直观的排序算法

大家好!今天我们来聊聊一个简单却非常经典的排序算法——插入排序(Insertion Sort)。在所有的排序算法中,插入排序是最直观的一个。 一、插入排序的基本思想 插入排序的核心思想是:将一个待排序的元素,插…

独立开发者Product Hunt打榜教程

Product Hunt 是创业者和开发者展示新产品的地方,对于独立开发者来说,打榜不仅仅是展示产品的良机,更是提高品牌知名度和获取早期用户的重要途径。以下是独立开发者如何在Product Hunt上打榜的详细教程: 1. 产品准备阶段 确保产…