news 2026/7/7 21:29:22

【大前端】【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/7 16:07:04

【Windows BAT脚本基础语法与常用功能实现指南】

Windows BAT脚本基础语法与常用功能实现指南 常用命令介绍 /? 获取命令帮助说明 在命令后添加/?可查看详细帮助信息&#xff0c;例如&#xff1a; dir /? echo和 echo用于输出文本或控制命令回显&#xff1a;echo off :: 关闭回显 echo Hello World :: 输出文本 echo. ::…

作者头像 李华
网站建设 2026/7/7 15:20:16

数据上新预告 | 中国省市区县三级政府政务微信公众号数据

中国省市区县三级政府政务微信公众号数据CnOpenData即将推出「省市区县三级政府政务微信公众号数据库」。本数据集系统性地采集了国家部委、各省、市、区县各级人民政府及其组成部门的官方政务微信公众号&#xff08;如“上海发布”、“杭州发布”等&#xff09;公开发布的信息…

作者头像 李华
网站建设 2026/7/7 10:02:26

LibreChat部署、配置

部署本次LibreChat部署下平台是Windows。部署LibreChat本身是非常简单的&#xff0c;总共分为三步&#xff1a;一、克隆项目&#xff1b;二、配置文件&#xff1b;三、启动项目。一、克隆项目git clone https://github.com/danny-avila/LibreChat.git二、配置文件将根目录中的.…

作者头像 李华
网站建设 2026/7/6 21:22:45

Qwen3模型vLLM并行配置性能测试:从0.6B到32B的最佳实践指南!

简介 文章对Qwen3系列模型(0.6B-32B)在vLLM不同并行配置(PP、TP)下进行了性能测试。研究表明&#xff0c;PCIe多卡环境下&#xff0c;若模型可单卡部署&#xff0c;推荐数据并行(DP)以获得最大吞吐&#xff1b;若关注吞吐量&#xff0c;推荐流水线并行(PP)&#xff1b;若关注请…

作者头像 李华
网站建设 2026/7/7 8:41:00

银河麒麟桌面操作系统禁用无线网卡的几种方法

【操作方法】 方法一: 步骤1:打开终端,执行以下命令,查看无线网卡所使用的驱动。 $sudo lshw |grep wifi输出结果中“driver=”后面的内容,就是无线网卡驱动。 步骤2:在终端执行以下命令,修改/etc/modprobe.d/blacklist.conf文件。 $sudo vim /etc/modprobe.d/blackli…

作者头像 李华