news 2026/4/17 20:48:28

【大前端】【iOS】iOS Objective-C 速成指南(工程实战向)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【大前端】【iOS】iOS Objective-C 速成指南(工程实战向)

下面给一份iOS Object-C(Objective-C)速成篇,定位是:给有开发经验(如 Android / RN / 前端)的工程师,快速能看懂、能写、能维护 iOS OC 代码


一、OC 是什么?一句话理解

Objective-C = C 语言 + Smalltalk 风格的消息机制 + iOS 运行时

特点:

  • 编译期弱,运行时强(Runtime)

  • 一切都是对象发消息

  • 语法啰嗦,但底层能力极强


二、基本语法速通

1️⃣ 类的定义

.h(头文件)

@interface Person : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) NSInteger age; - (void)sayHello; @end

.m(实现文件)

@implementation Person - (void)sayHello { NSLog(@"Hello, my name is %@", self.name); } @end

2️⃣ 创建对象

Person *p = [[Person alloc] init]; p.name = @"Tom"; p.age = 18; [p sayHello];

[]给对象发消息,不是函数调用


三、方法 & 消息机制(重点)

1️⃣ OC 方法长这样

- (void)loginWithUser:(NSString *)user password:(NSString *)pwd;

调用:

[self loginWithUser:@"tom" password:@"123456"];

👉参数是方法名的一部分


2️⃣ 类方法 vs 实例方法

+ (void)classMethod; // 类方法 - (void)instanceMethod; // 实例方法

调用:

[Person classMethod]; [p instanceMethod];

四、常用数据类型(必会)

1️⃣ NSString

NSString *str = @"Hello"; NSString *s2 = [NSString stringWithFormat:@"%@ World", str];

2️⃣ NSArray / NSMutableArray

NSArray *arr = @[@"a", @"b"]; NSMutableArray *mArr = [NSMutableArray array]; [mArr addObject:@"c"];

3️⃣ NSDictionary

NSDictionary *dict = @{ @"name": @"Tom", @"age": @18 };

五、属性 & 内存管理(核心)

1️⃣ property 修饰符(必背)

@property (nonatomic, strong) NSObject *obj; @property (nonatomic, copy) NSString *name; @property (nonatomic, weak) id delegate; @property (nonatomic, assign) NSInteger count;
修饰符用途
strong持有对象
weak防止循环引用(delegate)
copyNSString / block
assign基本类型

👉90% 情况:

  • NSString →copy

  • delegate →weak


2️⃣ ARC(自动内存管理)

现在几乎不用手写retain/release

但要理解:

  • strong ↔ retain

  • weak → 自动置 nil

  • block 默认强引用外部对象


六、Block(相当于 Java Lambda)

1️⃣ 定义 block

void (^myBlock)(int) = ^(int a) { NSLog(@"%d", a); };

2️⃣ 作为参数

- (void)request:(void(^)(BOOL success))callback;

调用:

[self request:^(BOOL success) { NSLog(@"done"); }];

3️⃣ Block 循环引用

__weak typeof(self) weakSelf = self; self.block = ^{ [weakSelf doSomething]; };

七、协议 & Delegate(iOS 灵魂)

1️⃣ 定义协议

@protocol LoginDelegate <NSObject> - (void)loginSuccess; @end

2️⃣ 使用

@property (nonatomic, weak) id<LoginDelegate> delegate;

调用:

[self.delegate loginSuccess];

👉等价于 Android 的接口回调


八、Category(给类加方法)

@interface NSString (Utils) - (BOOL)isNotEmpty; @end
@implementation NSString (Utils) - (BOOL)isNotEmpty { return self.length > 0; } @end

调用:

[@"abc" isNotEmpty];

⚠️不能加成员变量


九、Runtime(高级但常见)

1️⃣ 核心概念

  • 方法 = 消息

  • 方法查找是运行时完成

  • 可以交换方法(Hook)

2️⃣ 方法交换(常见于埋点 / 防 crash)

Method m1 = class_getInstanceMethod(self, @selector(viewDidLoad)); Method m2 = class_getInstanceMethod(self, @selector(xxx_viewDidLoad)); method_exchangeImplementations(m1, m2);

十、UIViewController 生命周期(必背)

- (void)viewDidLoad; - (void)viewWillAppear:(BOOL)animated; - (void)viewDidAppear:(BOOL)animated; - (void)viewWillDisappear:(BOOL)animated; - (void)viewDidDisappear:(BOOL)animated;

对应 Android:

  • onCreateviewDidLoad

  • onResumeviewDidAppear


十一、常见开发模式

MVC(iOS 官方)

  • Model

  • View

  • Controller(很容易写成巨无霸)

MVVM(现在主流)

  • Controller 轻

  • ViewModel 处理逻辑

  • 配合 ReactiveCocoa / RxSwift


十二、你只要记住的 10 句话

  1. OC 是发消息

  2. []不是数组,是方法调用

  3. NSString 用copy

  4. delegate 用weak

  5. Block 会强引用

  6. Category 不能加成员变量

  7. 一切 UI 在主线程

  8. Runtime 是 iOS 黑魔法

  9. ViewController 很重要

  10. 新项目优先 Swift,但老项目大量 OC


十三、学习路线(1 周上手)

Day 1

  • OC 基础语法

  • property / block / delegate

Day 2

  • UIView / UIViewController

  • 生命周期

Day 3

  • 网络请求(AFNetworking)

  • JSON → Model

Day 4

  • Runtime / Category

  • Method Swizzling

Day 5

  • 项目实战 + Debug


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:58:07

【LeetCode热题100(76/100)】划分字母区间

题目地址&#xff1a;链接 思路&#xff1a; 使用map记录最远字符串的地址重新遍历&#xff0c;如果当前内容等于最远字符串地址&#xff0c;那么入队列 function partitionLabels(s: string): number[] {let ans [];const n s.length;const map new Map();for(let i 0;…

作者头像 李华
网站建设 2026/4/10 22:34:31

Python编程语言面试问题二

Python 元组面试问题 Python 中的元组是什么&#xff1f; 在 Python 中&#xff0c;元组是用于存储多个项的不可变序列。创建后无法修改&#xff0c;且通过参数定义。元组适合固定的元素集合。 Python 中元组和列表有什么区别&#xff1f; 列表和元组的主要区别是 − 列表被…

作者头像 李华
网站建设 2026/4/12 5:20:10

【接口测试】1_Postman _Postman环境搭建

文章目录一、简介二、Postman安装和插件newman2.1 Postman安装2.1.1 Postman安装方式2.1.2 Postman注意事项2.2 安装Postman插件newman2.2.1 安装node.js2.2.2 安装newman (前提&#xff1a;确保 npm -v 验证通过)2.2.2.1 npm install报错ERR code ETIMEDOUT的解决办法2.2.2.2 …

作者头像 李华
网站建设 2026/4/15 7:41:58

【接口测试】2_Postman _Postman基础使用

文章目录一、Postman介绍和用例集创建二、基本使用-案例2.1 案例一2.2 案例二2.3 案例三一、Postman介绍和用例集创建 简介&#xff1a;一款接口的调试和测试工具。开发和测试工程师都可以使用。 支持所有主流系统。 特点︰支持MAC、Windows和Linux官网地址: https://www.get…

作者头像 李华
网站建设 2026/4/18 3:28:25

mapvthree 地理投影设计分析——自动转换与统一接口的设计理念

一、设计理念概述1.1 核心设计思想mapvthree 投影系统的设计核心在于自动化与统一化&#xff1a;自动转换机制&#xff1a;用户只需指定目标投影和数据源投影&#xff0c;引擎自动处理所有投影转换统一接口设计&#xff1a;无论使用什么投影&#xff0c;都通过统一的坐标转换接…

作者头像 李华