news 2026/7/10 21:03:10

【大前端】【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/7/9 8:04:55

springboot中File默认路径

springboot中File默认路径1. 背景在Springboot项目开发中,针对文件解析类业务,以及文件生成类业务,正对默认的文件路径比较容易混淆,这里通过代码示例,记录每一种方式对应的默认路径.方便以后开发中快速查询.项目信息如下:项目目录: D:\projects\javaprj项目名称: springbootte…

作者头像 李华
网站建设 2026/7/8 23:07:26

【2025年AI 编程时代的热点】

AI 编程与团队组织变革 AI 编程的成熟将显著改变团队结构和人才需求。传统开发团队中编码占比高的角色可能缩减&#xff0c;而具备AI工具链整合能力、业务理解深度和跨领域协作能力的人才需求上升。团队结构趋向扁平化&#xff0c;产品经理、工程师与AI工具的协作更紧密&#…

作者头像 李华
网站建设 2026/7/6 3:52:23

【C++ 笔记】从 C 到 C++:核心过渡 (中)

前言&#xff1a; 前文中&#xff0c;我们系统学习了 namespace 机制&#xff08;有效地解决了命名冲突问题&#xff0c;包含指定访问、部分展开和全部展开三种使用方式&#xff09;&#xff0c;同时了解了 cin/cout 输入输出流&#xff08;具备自动类型识别和支持自定义类…

作者头像 李华
网站建设 2026/7/9 19:33:35

SQL约束解析

约束分类:NOT NULL 非空约束:字段必须有值UNIQUE 唯一约束:值不能重复&#xff0c;但允许多个 NULLPRINARY KEY 主键约束:既是 NOT NULL 又是 UNIQUEDEFAULT 默认约束: 保存数据时.如果未指定该字段的值,则采用默认值CHECK 检查约束:保证字段满足某一个值FOREIGN KEY 外键约束…

作者头像 李华
网站建设 2026/7/6 4:35:18

地铁调研12-17

今天地铁调研主要内容包括&#xff1a;1.跟随工人使用道尺进行巡检。主要测量内容&#xff1a;轨道内距&#xff0c;轨道水平情况。记录&#xff1a;/-x&#xff0c;毫米。2.涂油板&#xff08;道岔变轨部分&#xff09;的油是否还有。3.扣配件的螺栓是否松动扣配件的情况&…

作者头像 李华
网站建设 2026/7/8 8:18:55

现代软件测试工具全景对比与选型指南

随着敏捷开发与DevOps实践的普及&#xff0c;软件测试工具生态呈现百花齐放态势。截至2025年末&#xff0c;测试工具已从简单的BUG记录工具发展为覆盖自动化测试、性能监控、安全检测的完整解决方案。本文将通过功能性对比、适用场景分析及成本效益评估三个维度&#xff0c;为测…

作者头像 李华