Objective-C 编程语言基础
Objective-C 是一种简洁的编程语言,专为支持面向对象编程而设计。它在 ANSI C 的基础上进行了扩展,增加了类、方法、属性等语法元素,同时提供了增强类动态性的结构。其类语法设计借鉴了 Smalltalk,属于早期的面向对象语言。
对于熟悉其他面向对象语言的开发者而言,许多传统概念如封装、继承和多态在 Objective-C 中均有体现。虽然存在一些差异,但这些将在后续内容中逐步介绍。若从未接触过编程,则建议先掌握基本的编程概念,尤其是对象及其交互方式,这对于 iOS 应用开发至关重要。
Objective-C 与 C 的关系
Objective-C 是 C 语言的严格超集,完全兼容 C 的语法。在项目中,头文件和源文件依然遵循 C 的组织方式,分别存放声明与实现。Objective-C 文件扩展名如下:
| 扩展名 | 用途 |
|---|---|
| .h | 头文件,包含类、类型、函数及常量的声明 |
| .m | 源文件,可包含 Objective-C 和 C 代码 |
| .mm | 源文件,除 Objective-C 和 C 外还可包含 C++ 代码,仅在必要时使用 |
引入头文件时,推荐使用 #import 替代 #include,因为它能防止重复包含。
字符串处理
Objective-C 支持 C 风格字符串,但更常用的是 NSString 对象。该类提供了丰富的功能,如 Unicode 支持、自动内存管理、格式化输出等。为了简化常量字符串的创建,Objective-C 提供了字面量语法,只需在字符串前加上 @ 符号:
NSString *message = @"Hello, World!";
NSString *formatted = [NSString stringWithFormat:@"Value: %d", 42];
NSString *fromC = [NSString stringWithCString:"C String" encoding:NSUTF8StringEncoding];
类的定义
类是 Objective-C 封装数据和行为的核心结构。每个对象是类的实例,包含自身的实例变量副本以及指向类方法的指针。类的定义分为两部分:接口(interface)和实现(implementation)。
接口部分使用 @interface 和 @end 包裹,声明类名、父类、实例变量和方法:
@interface MyClass : NSObject {
int count;
NSString *name;
}
- (id)initWithName:(NSString *)aName;
+ (MyClass *)createClassWithName:(NSString *)aName;
@end
实现部分使用 @implementation 和 @end 包裹,包含方法的具体逻辑:
@implementation MyClass
- (id)initWithName:(NSString *)aName {
if (self = [super init]) {
count = 0;
name = [aName copy];
}
return self;
}
+ (MyClass *)createClassWithName:(NSString *)aName {
return [[[self alloc] initWithName:aName] autorelease];
}
@end
变量声明
在 Objective-C 中,对象变量应使用指针类型。支持两种类型声明方式:
- 强类型:显式指定类名,如
MyClass *obj; - 弱类型:使用
id关键字,适用于不确定类型的场景,如集合操作
方法调用
Objective-C 中的方法分为实例方法和类方法:
- 实例方法:需先创建对象实例才能调用,以
-开头 - 类方法:无需实例即可调用,以
+开头
方法声明示例:
- (void)insertItem:(id)item atIndex:(NSUInteger)index;
+ (instancetype)newInstance;
方法调用采用消息传递语法,使用方括号包裹:
[array insertItem:obj atIndex:0];
[array addObject:[factory createItem]];
属性机制
属性是简化 getter/setter 方法定义的语法糖。通过 @property 声明:
@property (nonatomic, strong) NSString *title;
@property (readonly) NSInteger value;
访问属性可使用点语法:
obj.title = @"New Title";
NSLog(@"%ld", (long)obj.value);
协议与委托
协议定义了一组方法,任何类均可实现。常用于实现委托模式,即一个对象代表另一个对象处理特定任务。例如,UIApplicationDelegate 协议用于响应应用生命周期事件。
协议声明示例:
@protocol MyDelegate <NSObject>
- (void)didCompleteTask;
@optional
- (void)didFailWithError:(NSError *)error;
@end
类可通过实现协议方法表明其符合该协议。
以上内容介绍了 Objective-C 的核心语法和特性。若需深入了解,建议参考官方文档《The Objective-C Programming Language》。
