Objective - C 全解:从基础到高级特性

admin 2025-11-03 14:11:25

目录

Objective - C 全解:从基础到高级特性

引言

基础语法

变量声明与数据类型

条件语句

if - else

switch

循环语句

for 循环

while 循环

do - while 循环

面向对象编程

类和对象

接口文件(Person.h)

实现文件(Person.m)

使用类

继承和多态

父类(Animal.h)

父类实现(Animal.m)

子类(Dog.h)

子类实现(Dog.m)

使用继承和多态

协议

协议定义(Flyable.h)

实现协议的类(Bird.h)

实现协议的类的实现(Bird.m)

使用协议

内存管理

手动引用计数(MRC)

自动引用计数(ARC)

高级特性

类别(Category)

类别定义(NSString+Exclamation.h)

类别实现(NSString+Exclamation.m)

使用类别

键值编码(KVC)和键值观察(KVO)

KVC 示例

KVO 示例

总结

引言

Objective - C 是一种面向对象的编程语言,主要用于 macOS 和 iOS 系统的应用开发。它在 C 语言的基础上添加了面向对象的特性,与 Cocoa 和 Cocoa Touch 框架紧密结合,是苹果生态系统中开发的重要工具。本文将全面介绍 Objective - C 的各个方面,包括基础语法、面向对象编程、内存管理、高级特性等,并结合代码示例进行详细讲解。

基础语法

变量声明与数据类型

Objective - C 基于 C 语言,支持 C 语言的基本数据类型,同时也有一些特定的数据类型,如 NSString 用于处理字符串。

#import

int main(int argc, const char * argv[]) {

@autoreleasepool {

// 基本数据类型

int integerValue = 10;

float floatValue = 3.14f;

double doubleValue = 2.71828;

char charValue = 'A';

BOOL booleanValue = YES;

// 字符串类型

NSString *stringValue = @"Hello, Objective - C!";

NSLog(@"Integer: %d, Float: %f, Double: %lf, Char: %c, Boolean: %d, String: %@",

integerValue, floatValue, doubleValue, charValue, booleanValue, stringValue);

}

return 0;

}

条件语句

Objective - C 支持 if - else 和 switch 条件语句。

if - else

int num = 10;

if (num > 5) {

NSLog(@"num 大于 5");

} else {

NSLog(@"num 小于等于 5");

}

switch

int day = 3;

switch (day) {

case 1:

NSLog(@"星期一");

break;

case 2:

NSLog(@"星期二");

break;

case 3:

NSLog(@"星期三");

break;

default:

NSLog(@"其他");

break;

}

循环语句

Objective - C 支持 for、while 和 do - while 循环。

for 循环

for (int i = 1; i <= 5; i++) {

NSLog(@"%d", i);

}

while 循环

int j = 1;

while (j <= 5) {

NSLog(@"%d", j);

j++;

}

do - while 循环

int k = 1;

do {

NSLog(@"%d", k);

k++;

} while (k <= 5);

面向对象编程

类和对象

在 Objective - C 中,类的定义分为接口(.h 文件)和实现(.m 文件)两部分。

接口文件(Person.h)

#import

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;

@property (nonatomic, assign) NSInteger age;

- (void)introduce;

@end

实现文件(Person.m)

#import "Person.h"

@implementation Person

- (void)introduce {

NSLog(@"我叫 %@,今年 %ld 岁。", self.name, (long)self.age);

}

@end

使用类

#import

#import "Person.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Person *person = [[Person alloc] init];

person.name = @"Alice";

person.age = 20;

[person introduce];

}

return 0;

}

继承和多态

Objective - C 支持类的继承,子类可以重写父类的方法。

父类(Animal.h)

#import

@interface Animal : NSObject

@property (nonatomic, strong) NSString *name;

- (instancetype)initWithName:(NSString *)name;

- (void)makeSound;

@end

父类实现(Animal.m)

#import "Animal.h"

@implementation Animal

- (instancetype)initWithName:(NSString *)name {

self = [super init];

if (self) {

self.name = name;

}

return self;

}

- (void)makeSound {

NSLog(@"%@ 发出声音", self.name);

}

@end

子类(Dog.h)

#import "Animal.h"

@interface Dog : Animal

@end

子类实现(Dog.m)

#import "Dog.h"

@implementation Dog

- (void)makeSound {

NSLog(@"%@ 汪汪叫", self.name);

}

@end

使用继承和多态

#import

#import "Animal.h"

#import "Dog.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Dog *dog = [[Dog alloc] initWithName:@"旺财"];

[dog makeSound];

}

return 0;

}

协议

Objective - C 中的协议类似于 Java 中的接口,定义了一组方法的规范。

协议定义(Flyable.h)

#import

@protocol Flyable

- (void)fly;

@end

实现协议的类(Bird.h)

#import

#import "Flyable.h"

@interface Bird : NSObject

@end

实现协议的类的实现(Bird.m)

#import "Bird.h"

@implementation Bird

- (void)fly {

NSLog(@"鸟儿在飞");

}

@end

使用协议

#import

#import "Bird.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Bird *bird = [[Bird alloc] init];

[bird fly];

}

return 0;

}

内存管理

Objective - C 有两种主要的内存管理方式:手动引用计数(MRC)和自动引用计数(ARC)。

手动引用计数(MRC)

在 MRC 中,需要手动调用 retain、release 和 autorelease 方法来管理对象的生命周期。

#import

@interface MyClass : NSObject

@end

@implementation MyClass

- (void)dealloc {

NSLog(@"MyClass 对象被释放");

[super dealloc];

}

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

MyClass *obj = [[MyClass alloc] init]; // 引用计数为 1

[obj retain]; // 引用计数为 2

[obj release]; // 引用计数为 1

[obj release]; // 引用计数为 0,对象被释放

}

return 0;

}

自动引用计数(ARC)

ARC 是 Xcode 引入的一种自动内存管理机制,它会自动插入 retain、release 和 autorelease 调用,开发者无需手动管理内存。上面的大部分示例代码都是基于 ARC 的。

高级特性

类别(Category)

类别允许在不修改原有类的实现的情况下,为类添加新的方法。

类别定义(NSString+Exclamation.h)

#import

@interface NSString (Exclamation)

- (NSString *)addExclamation;

@end

类别实现(NSString+Exclamation.m)

#import "NSString+Exclamation.h"

@implementation NSString (Exclamation)

- (NSString *)addExclamation {

return [self stringByAppendingString:@"!"];

}

@end

使用类别

#import

#import "NSString+Exclamation.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

NSString *str = @"Hello";

NSString *newStr = [str addExclamation];

NSLog(@"%@", newStr);

}

return 0;

}

键值编码(KVC)和键值观察(KVO)

KVC 允许通过字符串键来访问对象的属性,KVO 允许监听对象属性的变化。

KVC 示例

#import

@interface MyObject : NSObject

@property (nonatomic, strong) NSString *name;

@end

@implementation MyObject

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

MyObject *obj = [[MyObject alloc] init];

[obj setValue:@"John" forKey:@"name"];

NSString *name = [obj valueForKey:@"name"];

NSLog(@"Name: %@", name);

}

return 0;

}

KVO 示例

#import

@interface MyObservableObject : NSObject

@property (nonatomic, assign) NSInteger value;

@end

@implementation MyObservableObject

@end

@interface MyObserver : NSObject

@end

@implementation MyObserver

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

if ([keyPath isEqualToString:@"value"]) {

NSLog(@"Value changed: %@", change);

}

}

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

MyObservableObject *observable = [[MyObservableObject alloc] init];

MyObserver *observer = [[MyObserver alloc] init];

[observable addObserver:observer forKeyPath:@"value" options:NSKeyValueObservingOptionNew context:nil];

observable.value = 10;

[observable removeObserver:observer forKeyPath:@"value"];

}

return 0;

}

总结

Objective - C 是一门功能丰富、历史悠久的编程语言,在苹果生态系统的开发中有着重要的地位。它结合了 C 语言的高效和面向对象编程的灵活性,同时提供了诸如内存管理、类别、KVC 和 KVO 等高级特性。通过本文的介绍,你应该对 Objective - C 有了一个全面的了解。希望你能在实际开发中运用 Objective - C 来创建出优秀的应用程序。