Objective C 基础知识(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言
Objective-C 是一门历史悠久的编程语言,它与 C 语言语法高度兼容,并融入了 Smalltalk 的面向对象特性。自 1980 年代诞生以来,Objective-C 成为了苹果生态系统(如 iOS 和 macOS 开发)的核心语言。尽管近年来 Swift 的普及度逐渐提升,但 Objective-C 仍然是理解苹果框架底层逻辑的重要工具。本文将通过循序渐进的方式,为编程初学者和中级开发者梳理 Objective-C 的核心概念与实践方法,帮助读者快速掌握这门语言的 基础知识。
语法基础:从简单程序开始
1. 程序结构与基本语法
Objective-C 程序的典型结构包含头文件(.h
)和实现文件(.m
)。以下是一个简单的 "Hello World" 示例:
// main.m 文件
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Hello Objective-C!");
}
return 0;
}
#import
:用于引入 Foundation 框架,这是 Objective-C 开发的基础库。@autoreleasepool
:管理内存释放,替代了早期的NSAutoreleasePool
。NSLog
:类似于printf
,但支持格式化输出并自动换行。
2. 变量与数据类型
Objective-C 继承了 C 语言的变量类型,如 int
, float
, char
,同时新增了对象类型(id
)。例如:
int age = 25; // 基本类型
NSString *name = @"John"; // 对象类型,使用指针
id anyObject = name; // id 可以指向任何对象
比喻:可以将 id
想象为一个万能钥匙,虽然能打开所有门(对象),但使用前需明确具体类型。
对象与消息传递:面向对象的核心
1. 类与对象的概念
在 Objective-C 中,所有对象均通过类定义创建。例如:
@interface Person : NSObject {
NSString *name;
int age;
}
- (void)sayHello;
@end
@implementation Person
- (void)sayHello {
NSLog(@"Hello, my name is %@.", name);
}
@end
@interface
:定义类的公共接口,包括属性和方法声明。@implementation
:实现类的具体功能。
2. 消息传递机制
Objective-C 的对象间通信通过 消息传递(Messaging) 实现。例如:
Person *person = [[Person alloc] init];
[person sayHello]; // 向 person 对象发送 "sayHello" 消息
比喻:对象就像快递员,消息就是包裹。当 [person sayHello]
被调用时,系统会寻找 sayHello
方法的实现,如同快递员接收包裹并处理。
内存管理:从 MRC 到 ARC
1. 传统内存管理(MRC)
在 Manual Reference Counting(MRC) 模式下,开发者需手动管理对象的引用计数:
Person *person = [[Person alloc] init]; // retainCount = 1
[person retain]; // retainCount = 2
[person release]; // retainCount = 1
[person autorelease]; // 自动在当前循环结束后释放
比喻:内存管理如同图书馆借书。每 retain
是借书,release
是还书,若无人借书(计数为0),书籍(对象)会被销毁。
2. 自动引用计数(ARC)
苹果推出的 Automatic Reference Counting(ARC) 自动处理内存释放,极大简化了代码:
Person *person = [[Person alloc] init]; // ARC 自动管理内存
person = nil; // 显式释放引用
注意:ARC 并非万能,仍需注意循环引用等问题,可通过 weak
或 unsafe_unretained
关键字解决。
Foundation 框架:核心类与工具
1. 基础容器类
Foundation 提供了 NSArray
, NSDictionary
等常用容器:
NSArray *students = @[@"Alice", @"Bob", @"Charlie"];
NSDictionary *grades = @{
@"Alice": @90,
@"Bob": @85
};
NSLog(@"%@", students[0]); // 输出 Alice
NSLog(@"%d", [grades[@"Bob"] intValue]); // 输出 85
2. 常用工具类
NSString
:字符串操作,支持格式化:NSString *formatted = [NSString stringWithFormat:@"Score: %d", 95];
NSData
/NSMutableData
:处理二进制数据。NSDate
:日期与时间管理。
实战案例:构建一个简单计算器
1. 定义计算器类
@interface Calculator : NSObject
- (double)add:(double)a to:(double)b;
- (double)multiply:(double)a by:(double)b;
@end
@implementation Calculator
- (double)add:(double)a to:(double)b {
return a + b;
}
- (double)multiply:(double)a by:(double)b {
return a * b;
}
@end
2. 使用计算器对象
Calculator *calc = [[Calculator alloc] init];
double result = [calc add:5 to:3]; // 8.0
result = [calc multiply:4 by:6]; // 24.0
扩展思考:可以通过添加 @property
将计算器结果存储为属性,例如:
@interface Calculator : NSObject
@property (assign) double lastResult;
// 其他方法...
@end
高级特性:类别与协议
1. 类别(Category)
通过类别可为已有类扩展方法,无需子类化:
@interface NSString (StringTools)
- (BOOL)isPalindrome;
@end
@implementation NSString (StringTools)
- (BOOL)isPalindrome {
return [self isEqualToString:[self reversedString]];
}
@end
2. 协议(Protocol)
定义接口规范,强制遵守协议的类实现特定方法:
@protocol Vehicle
- (void)startEngine;
@end
@interface Car : NSObject <Vehicle>
- (void)startEngine {
NSLog(@"引擎启动");
}
@end
调试与错误处理
1. 常见错误类型
- 编译错误:语法错误,如缺少分号或括号。
- 运行时错误:如空指针调用
[nil someMethod]
会安全返回nil
或 0。 - 逻辑错误:代码运行但结果不符合预期,需通过日志或调试器(Xcode)排查。
2. 使用 NSAssert
进行调试
NSAssert(value > 0, @"数值不能为负数");
结论
本文系统梳理了 Objective C 基础知识 的核心内容,从语法基础到对象模型、内存管理、框架使用,再到实战案例与高级特性,逐步构建了学习路径。对于编程初学者,建议从简单程序入手,通过实际编码加深对消息传递和对象模型的理解;中级开发者则可关注内存管理优化、协议设计等进阶主题。尽管 Swift 已成为苹果开发的主流语言,但 Objective-C 的底层逻辑与苹果生态的紧密关联,使其仍值得开发者深入掌握。
掌握这些 Objective C 基础知识,不仅能帮助开发者高效完成 iOS/macOS 项目的开发,更能为理解苹果框架的设计思想奠定坚实基础。希望本文能成为你探索 Objective-C 的起点,后续可结合官方文档与开源项目进一步实践。