下面给一份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); } @end2️⃣ 创建对象
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) |
| copy | NSString / block |
| assign | 基本类型 |
👉90% 情况:
NSString →
copydelegate →
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; @end2️⃣ 使用
@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:
onCreate→viewDidLoadonResume→viewDidAppear
十一、常见开发模式
MVC(iOS 官方)
Model
View
Controller(很容易写成巨无霸)
MVVM(现在主流)
Controller 轻
ViewModel 处理逻辑
配合 ReactiveCocoa / RxSwift
十二、你只要记住的 10 句话
OC 是发消息
[]不是数组,是方法调用NSString 用
copydelegate 用
weakBlock 会强引用
Category 不能加成员变量
一切 UI 在主线程
Runtime 是 iOS 黑魔法
ViewController 很重要
新项目优先 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