Objective C 基础知识(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 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 并非万能,仍需注意循环引用等问题,可通过 weakunsafe_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 的起点,后续可结合官方文档与开源项目进一步实践。

最新发布