秋招ios面试 -- 真题篇(三)

一、 介绍OC中的属性和成员变量

属性(Property):一套对外声明 + 访问约定的语法糖,synthesize & denamic就是控制其是否编译器是否为其自动生成setter/getter方法以及对应的ivar,并且附带内存管理和线程语义


成员变量(ivar):对象在内存中实际存放的数据槽位,由类定义时确定布局,运行时直接存取
语法糖:语法糖(Syntactic Sugar)是编程语言中一种语法设计方式,旨在通过更简洁、易读的写法替代复杂的代码结构,但不会改变语言的实际功能或底层逻辑。其核心目的是提升代码的可读性和开发效率

成员变量(ivar)

  1. ivar的偏移在编译期确实,对象的大小包含所以ivar

  2. 分类不能新增ivar,因为分类是运行时合并,此时布局已经确定

  3. 使用_xxx直接访问(绕过方法调用,更快),使用getter/setter访问(更安全,可以携带内存语义,KVO通知等)。

note:初始化与析构阶段(`init`/`dealloc`):推荐直接访问 ivar,避免 setter 的副作用

属性(property)

  1. 若未手写 getter/setter,编译器默认生成访问方法和一个名为 `_xxx` 的 ivar;

  2. 显式合成:`@synthesize xxx = _customIvar;`

  3. 禁止合成:`@dynamic xxx;`,此时实现需要在运行时提供

我们可以使用属性修饰符来对属性进行修饰,常用如下

|-------------------------|----------------------------------|
| strong | 持有:默认对对象属性:会增加引用计数 |
| weak | 不持有:被引用对象释放后自动置为nil |
| copy | 拷贝一份:用于防御性编程,避免外部修改 |
| assign | 简单复制,用户基本类型,用于对象危险(悬挂指针) |
| unsafe_unretained | 与 assign 类似,但语义化为"非安全不保留引用",不会置零 |
| atomic | getter/setter 做最小原子保护 |
| nonatomic | 无锁:性能更好 |
| readwrite | 可读可写 |
| readonly | 只读 |
| `getter=`/`setter=` | 自定义方法名 |
| nullable | 可谓空 |
| nonnull | 不可为空 |

二、什么是沙盒模型

沙盒模型:ios中的Sandbox是一套进程级别的安全隔离机制,每个App都运行在自己被隔离的文件系统和权限范围内,默认无法访问其余App的数据,系统敏感权限或者越权API

一般来说,沙盒包含的主要边界如下

  • App.bundle 只读,应用资源
  • Documents:用户数据
  • Library/Application Support 应用支持数据
  • Library/Cache 缓存
  • tmp 临时文件

访问摄像头、麦克风、照片、通讯录、蓝牙、定位、通知等都需要 Info.plist 声明和用户授权。

一般来说:把用户重要数据放在 `Documents` 或 `Library/Application Support`;缓存放 `Caches`;临时文件用 `tmp`。

三、IOS的系统架构

|----------------------------|
| 应用层(App Layer) |
| 框架层(Frameworks) |
| 核心服务层(Core Services) |
| 内核与硬件层(Kernel & Hardware) |

应用层:你的应用(.app)、App Extension、Widget、App Clip 等。

  • App生命周期
  • 路由与导航(UINavigationController、UITabBarController、SwiftUI NavigationStack)
  • 数据存储(UserDefaults、Keychain、文件系统、数据库)
  • 网络(URLSession)、媒体(AVFoundation)、推送通知(UserNotifications)
  • 设备能力:相机/麦克风/定位/蓝牙/HealthKit/CarPlay(需权限与 Entitlements)

框架层:提供高层次的系统框架,支撑 UI、媒体、设备、网络等常见功能。

如UIKit,SwiftUI,CoreLocation。。。。。

核心服务层:系统通用服务与中间层能力,供上层框架与 App 使用。

如Foundation,Core Foundation,Core Data。。。。。

内核与硬件层:XNU 内核:Mach + BSD

四:简述视图控制器的生命周期

init(控制器对象创建) -> loadView -> viewDidLoad(视图加载完成)

viewWillAppear -> viewDidAppear

viewWillDidappear -> viewDidDisAppear

viewWillLayoutSubviews :即将完成子视图布局

viewDidLayoutSubviews:完成布局

viewWillTransition:横竖屏切换或者尺寸类变化的时候回调

五:动画的基本类型有哪几种

UIView 级别(高层封装,易用)

  1. 基本属性动画:改变 `alpha`、`frame/center/bounds`、`transform`(缩放/旋转/平移)、`backgroundColor`或者使用 `UIView.animate(withDuration:...)`

  2. 过渡动画:`transition(from:to:options:)`、`transition(with:options:)`

  3. 弹簧动画:`usingSpringWithDamping`、`initialSpringVelocity`,实现回弹、阻尼效果

  4. 关键帧动画:`UIView.animateKeyframes` 分段定义关键帧,适合复杂节奏
    Core Animation 级别

CABasicAnimation:针对单一属性的 from/to/by,如 `opacity`、`position`、`bounds`、`cornerRadius`

CAKeyframeAnimation:多关键帧/路径动画(`path`),可做贝塞尔路径运动

CAAnimationGroup:多个动画并行/串行动画组

CATransition:`type`/`subtype` 控制淡入淡出、推入、揭开等

实际上,我们在开发的时候大多采用不复杂的动画,多数情况UIview的级别已经足够

相关推荐
ii_best39 分钟前
ios脚本开发工具安装按键精灵uncOver越狱教程ios14以及以下系统
ios·自动化·编辑器
游戏开发爱好者840 分钟前
iOS 性能测试的工程化方法,构建从底层诊断到真机监控的多工具测试体系
android·ios·小程序·https·uni-app·iphone·webview
CoderYanger1 小时前
动态规划算法-简单多状态dp问题:11.按摩师
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
Baihai_IDP1 小时前
用户体验与商业化的两难:Chatbots 的广告承载困境分析
人工智能·面试·llm
CoderYanger1 小时前
动态规划算法-路径问题:10.地下城游戏
开发语言·算法·leetcode·游戏·职场和发展·动态规划·1024程序员节
灵犀坠1 小时前
前端高频知识点汇总:从手写实现到工程化实践(面试&开发双视角)
开发语言·前端·javascript·tcp/ip·http·面试·职场和发展
2501_916008891 小时前
iOS App 混淆的真实世界指南,从构建到成品 IPA 的安全链路重塑
android·安全·ios·小程序·uni-app·cocoa·iphone
Swift社区1 小时前
LeetCode 441 - 排列硬币
算法·leetcode·职场和发展
solicitous1 小时前
第一章 信息化发展
职场和发展