Objective-C 基础教程指南
Objective-C 是一种在 C 语言基础上添加了 Smalltalk 风格消息传递机制的面向对象编程语言,它是苹果 macOS 和 iOS 开发的主要语言,尤其是在 Swift 语言出现之前,虽然现在 Swift 更受推崇,但许多遗留项目、重要的底层框架(如 Cocoa 和 Cocoa Touch)以及一些特定场景仍然需要 Objective-C 知识。

核心基础概念(学习路线图)
学习 Objective-C,你需要掌握以下几个关键部分:
语法基础
- 文件扩展名:
.h: 头文件,用于声明类、方法、属性等接口。.m: 实现文件,用于实现.h文件中声明的方法。.mm: 如果文件中同时包含 C++ 和 Objective-C 代码,使用此扩展名。
#importvs#include: 使用#import来包含头文件,它可以防止同一个文件被重复包含。- Foundation 框架: 这是 Objective-C 的基础框架,提供了基本的数据类型(如
NSString,NSArray,NSDictionary)、集合类、文件管理、网络等核心功能,你的代码几乎都会用到它。
面向对象编程
- 类与对象: 类是创建对象的蓝图。
- 接口与实现:
- 接口: 在
.h文件中定义,使用@interface关键字声明类的名称、父类、属性和方法。 - 实现: 在
.m文件中定义,使用@implementation关键字来实现接口中声明的方法。
- 接口: 在
- 方法:
- 实例方法: 以 (减号) 开头,作用于对象实例。
- (void)myMethod; - 类方法: 以 (加号) 开头,作用于类本身,不需要创建实例即可调用。
+ (instancetype)sharedManager; - 方法签名:
-(返回类型)方法名:(参数类型)参数名1 参数标签2:(参数类型)参数名2;- (void)setAge:(int)newAge andName:(NSString *)newName;- 调用时:
[person setAge:25 andName:@"Alice"];(这里的andName:就是参数标签,增加了可读性)。
- 实例方法: 以 (减号) 开头,作用于对象实例。
属性

- 使用
@property关键字在接口中声明一个属性,它会自动生成对应的成员变量(实例变量)和 getter/setter 方法。 - 属性修饰符:
- 原子性:
atomic(默认,线程安全但性能开销大) vsnonatomic(非线程安全,性能好,iOS 开发中常用)。 - 内存管理:
strong(强引用,默认) vsweak(弱引用,避免循环引用) vsassign(用于基本数据类型) vscopy(用于可变对象,如NSString,NSArray,防止外部修改)。 - 读写权限:
readwrite(默认,生成 getter 和 setter) vsreadonly(只生成 getter)。
- 原子性:
内存管理 (非常重要)
- MRC (Manual Reference Counting): 手动引用计数,你需要手动调用
retain,release,autorelease来管理对象的生命周期。alloc,new,copy,mutableCopy会创建一个新对象,引用计数 +1。release会让引用计数 -1,当引用计数为 0 时,对象被销毁。autoreleasepool用于将对象放入一个自动释放池,当池子被排空时,会自动给池中所有对象发送release消息。
- ARC (Automatic Reference Counting): 自动引用计数,现代 Objective-C 开发的默认方式,编译器在编译时会自动插入
retain,release,autorelease代码,你只需要关注strong和weak等修饰符即可。
协议
- 类似于 Java 中的接口或 C++ 中的纯虚类,它定义了一组方法,但不实现。
- 任何类都可以采纳协议,并实现协议中定义的方法。
- 使用
@protocol关键字声明。 - 委托模式: 这是 iOS 开发中一种核心的设计模式,基于协议实现,一个对象(委托者)将某些任务委托给另一个对象(委托)来处理。
分类
- 允许你为已存在的类(即使是系统类,如
NSString)添加新的方法,而无需修改其原始代码或创建子类。 - 使用
@interface ClassName (CategoryName)语法。
推荐的学习资源
寻找一份完整的“Objective-C 基础教程 PDF”可能比较困难,因为官方不再主推该语言,但以下资源组合起来,效果非常好。

官方文档 (首选,最权威)
- The Objective-C Programming Language: 这是苹果官方提供的经典教程,内容全面且权威,虽然是网页版,但你可以使用浏览器的“打印为 PDF”功能将其保存下来。
- Cocoa Fundamentals Guide: 介绍 Cocoa 框架的基本概念,帮助你理解如何使用 Objective-C 进行实际开发。
免费在线教程和书籍
- Objective-C Cheat Sheet: 一份非常好的语法速查表,适合快速回顾。
- 《Programming with Objective-C》 (by Apple): 官方的入门电子书,非常清晰。
- ZetCode: 提供了非常简洁的 Objective-C 教程,适合有其他语言基础的开发者快速上手。
付费经典书籍 (如果你想深入)
- 《Objective-C 程序设计(第4版)》 (Programming in Objective-C, 4th Edition - Stephen G. Kochan): 被誉为 Objective-C 学习的“圣经”,非常适合零基础读者,讲解非常细致。
- 《Cocoa 编程》(第4版) (Cocoa Programming for Mac OS X, 4th Edition - Aaron Hillegass): 这本书不仅教你 Objective-C,更重要的是教你如何使用 Cocoa 框架进行 Mac 开发,理论与实践结合得很好。
视频教程
- YouTube: 搜索 "Objective-C tutorial for beginners" 或 "iOS development with Objective-C",有大量免费视频课程。
- Udemy / Coursera: 平台上有很多付费的 Objective-C 课程,通常包含项目实战。
“Hello, World!” 示例
下面是一个简单的 Objective-C 程序,展示了类、方法、属性和 main 函数的基本用法。
创建文件
创建两个文件:Person.h 和 Person.m。
Person.h (接口文件)
#import <Foundation/Foundation.h> // @interface 声明类的接口 // 继承自 NSObject,这是所有 Objective-C 对象的基类 @interface Person : NSObject // 声明一个属性 // nonatomic: 非原子,提高性能 // strong: 强引用,保证对象的生命周期 @property (nonatomic, strong) NSString *name; @property (nonatomic, assign) NSInteger age; // assign 用于基本数据类型 // 声明一个实例方法 - (void)sayHello; // 声明一个类方法 + (instancetype)personWithName:(NSString *)name age:(NSInteger)age; @end
Person.m (实现文件)
#import "Person.h"
// @implementation 实现类的接口
@implementation Person
// 实现 sayHello 方法
- (void)sayHello {
// 使用 NSLog 打印日志,类似于 C 语言的 printf
// %@ 是 NSString 的格式说明符
NSLog(@"Hello, my name is %@ and I am %ld years old.", self.name, (long)self.age);
}
// 实现类方法
+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age 