Object-C 新手教程

Objective-C 是一门基于 C 语言的编程语言,是开发 Mac OS X 以及 iOS 应用程序的主要语言之一。如果你想学习 iOS 开发或者 Mac 开发,那么你需要学习 Objective-C。

本教程将从语法和基本概念开始,逐步向读者展示如何使用 Objective-C 开发应用程序,并给出不少于1000个字的案例说明。

## Objective-C 的基础语法

Objective-C 的基础语法和 C 语言类似,但是多了一些面向对象的特性。下面是一个简单的 Objective-C 的 Hello World 程序,让我们一起来看看:

```objective-c

#import

@interface HelloWorld : NSObject

- (void)sayHello;

@end

@implementation HelloWorld

- (void)sayHello {

printf("Hello, World!\n");

}

@end

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

@autoreleasepool {

HelloWorld *hwObject = [[HelloWorld alloc] init];

[hwObject sayHello];

}

return 0;

}

```

这个例子使用了 Objective-C 的面向对象的特性,使用 `@interface` 声明了一个叫做 `HelloWorld` 的类,并在其中声明了一个名为 `sayHello` 的方法。

在 `@implementation` 中实现了 `sayHello` 方法,并且在 `main` 函数中创建了一个 `HelloWorld` 类的实例对象,并调用了 `sayHello` 方法。

在 Objective-C 中,我们使用方括号 `[ ]` 来调用一个对象的方法。

## Objective-C 的面向对象特性

Objective-C 是一门面向对象的语言,它支持类、对象、继承、封装等概念。

### 类和对象

在 Objective-C 中,类是对象的模板,用于描述对象的属性和行为,对象则是类的一个实例。

这里是一个简单的例子:

```objective-c

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;

@property (nonatomic, assign) NSInteger age;

- (void)sayHello;

@end

@implementation Person

- (void)sayHello {

NSLog(@"Hello, my name is %@ and I'm %ld years old.", self.name, (long)self.age);

}

@end

int main() {

@autoreleasepool {

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

p.name = @"Tom";

p.age = 25;

[p sayHello];

}

return 0;

}

```

在这个例子中,我们声明了一个叫做 `Person` 的类,用于描述人的属性和行为。在 `@implementation` 中实现了 `sayHello` 方法,用于输出个人信息。

在 `main` 函数中创建了一个 `Person` 类的实例对象 `p`,并设置了其属性值,最后调用了 `sayHello` 方法输出个人信息。

### 继承

在 Objective-C 中,一个类可以继承另一个类的属性和方法,称之为子类和父类的关系。一个子类继承了它的父类的所有属性和方法,也可以添加自己的属性和方法,但子类不能访问父类的私有成员。

下面是一个继承的例子:

```objective-c

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;

@property (nonatomic, assign) NSInteger age;

- (void)sayHello;

@end

@implementation Person

- (void)sayHello {

NSLog(@"Hello, my name is %@ and I'm %ld years old.", self.name, (long)self.age);

}

@end

@interface Student : Person

@property (nonatomic, strong) NSString *school;

- (void)study;

@end

@implementation Student

- (void)study {

NSLog(@"I'm studying at %@", self.school);

}

@end

int main() {

@autoreleasepool {

Student *s = [[Student alloc] init];

s.name = @"Tom";

s.age = 20;

s.school = @"Harvard";

[s sayHello];

[s study];

}

return 0;

}

```

在这个例子中,我们创建了一个 `Student` 类,它继承了 `Person` 类的属性和方法,并添加了它自己的 `school` 属性和 `study` 方法。

在 `main` 函数中创建了一个 `Student` 类的实例对象 `s`,并设置了其属性值,最后调用了 `sayHello` 方法输出个人信息和调用 `study` 方法输出学校信息。

### 封装

在 Objective-C 中,我们可以使用访问控制符来实现封装。访问控制符有三个:`public`、`protected` 和 `private`。

- `public` 表示公有的属性和方法,可以从任何地方访问。

- `protected` 表示受保护的属性和方法,只能在本类和子类中访问。

- `private` 表示私有的属性和方法,只能在本类中访问。

下面是一个封装的例子:

```objective-c

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;

@property (nonatomic, assign) NSInteger age;

- (void)sayHello;

@end

@implementation Person

- (void)sayHello {

NSLog(@"Hello, my name is %@ and I'm %ld years old.", self.name, (long)self.age);

}

@end

@interface Student : Person

@property (nonatomic, strong) NSString *school;

- (void)study;

@end

@implementation Student {

NSString *_major;

}

- (void)study {

NSLog(@"I'm studying %@ at %@", _major, self.school);

}

- (void)setMajor:(NSString *)major {

_major = major;

}

- (NSString *)major {

return _major;

}

@end

int main() {

@autoreleasepool {

Student *s = [[Student alloc] init];

s.name = @"Tom";

s.age = 20;

s.school = @"Harvard";

[s setMajor:@"Computer Science"];

[s sayHello];

[s study];

}

return 0;

}

```

在这个例子中,我们在 `@implementation` 中定义了一个私有属性 `_major`,并使用 `setMajor` 和 `major` 方法来设置和获取私有属性值。

在 `study` 方法中,我们使用私有属性 `_major` 来输出专业信息,这样可以保护 `_major` 的值不被外部访问。

## Objective-C 的常用框架

Objective-C 有很多常用的框架,下面是几个最常用的框架。

### Foundation 框架

Foundation 框架是 Objective-C 语言的基础框架,提供了许多在编程中经常用到的类,如 NSString、NSArray、NSDictionary 等等。

下面是一个使用 NSString 类的例子:

```objective-c

NSString *str1 = @"Hello";

NSString *str2 = @"World";

NSString *str3 = [str1 stringByAppendingString:str2];

NSLog(@"%@", str3);

```

在这个例子中,我们用 `NSString` 类来创建字符串,并使用 `stringByAppendingString` 方法来拼接字符串。

### UIKit 框架

UIKit 框架是用于 iOS 开发的用户界面框架,提供了许多基础的 UI 组件,如按钮、标签、文本框、滑动条等等。

下面是一个使用 UILabel 组件的例子:

```objective-c

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];

label.text = @"Hello, World!";

[self.view addSubview:label];

```

在这个例子中,我们用 `UILabel` 组件创建一个标签,并设置它的文字。最后使用 `addSubview` 方法将标签添加到视图上。

### Core Data 框架

Core Data 框架是一个用于数据存储和管理的框架,它提供了一个对象关系映射的机制,使得开发者可以轻松地将应用程序中的数据与数据库相连。

下面是一个使用 Core Data 框架的例子:

```objective-c

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

NSURL *url = [NSURL fileURLWithPath:@"~/data.sqlite"];

NSError *error = nil;

NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];

if (!store) {

NSLog(@"Error: %@", error);

}

NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

[context setPersistentStoreCoordinator:psc];

```

在这个例子中,我们用 `NSManagedObjectModel` 类创建对象模型,用 `NSPersistentStoreCoordinator` 类创建持久化存储协调器,将数据保存到指定的 SQLite 数据库中。最后我们创建上下文 `NSManagedObjectContext` 类,并设置它的持久化存储协调器。

## Objective-C 的案例实现

下面是一个使用 Objective-C 开发 iOS 应用程序的案例实现。这是一个简单的计算器应用程序,可以进行加、减、乘、除四种基本运算。

### 创建项目

在 Xcode 中选择 File → New → Project,选择 iOS → Application → Single View Application,填写项目信息,并选择语言为 Objective-C。点击 Next → Create 创建项目。

### 添加 UI 组件

在 Main.storyboard 中拖拽一个 Label 组件和四个按钮组件到视图中,设置它们的位置和大小,并添加约束。

### 实现界面逻辑

在 ViewController.m 中添加以下代码:

```objective-c

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *label;

@property (nonatomic, assign) double num1;

@property (nonatomic, assign) double num2;

@property (nonatomic, assign) int op;

@end

@implementation ViewController

- (IBAction)numberButtonTapped:(id)sender {

UIButton *button = (UIButton *)sender;

NSString *text = self.label.text;

if ([text isEqualToString:@"0"]) {

text = @"";

}

text = [text stringByAppendingString:button.titleLabel.text];

self.label.text = text;

}

- (IBAction)opButtonTapped:(id)sender {

UIButton *button = (UIButton *)sender;

self.num1 = [self.label.text doubleValue];

self.op = button.tag;

self.label.text = @"0";

}

- (IBAction)equalButtonTapped:(id)sender {

self.num2 = [self.label.text doubleValue];

double result = 0;

switch (self.op) {

case 1: // 加法

result = self.num1 + self.num2;

break;

case 2: // 减法

result = self.num1 - self.num2;

break;

case 3: // 乘法

result = self.num1 * self.num2;

break;

case 4: // 除法

result = self.num1 / self.num2;

break;

default:

break;

}

self.label.text = [NSString stringWithFormat:@"%g", result];

}

- (IBAction)clearButtonTapped:(id)sender {

self.label.text = @"0";

}

@end

```

在 `ViewController` 类中,我们添加了四个 IBAction 方法,用于数字、运算符和清除按钮的响应事件。

在 `numberButtonTapped` 方法中,我们获取到按钮的标题,将其添加到当前 Label 的文本最后,并更新 Label 的显示。

在 `opButtonTapped` 方法中,我们获取到按钮的 tag 值,表示加、减、乘、除四种运算中的一种,同时将当前 Label 的文本转换成数值并保存到 `num1` 属性中。

在 `equalButtonTapped` 方法中,我们获取到当前 Label 的文本转换成数值并保存到 `num2` 属性中,根据运算符的值进行计算,并将结果转换成字符串赋值给 Label 的文本。

在 `clearButtonTapped` 方法中,我们直接将 Label 的文本赋值为 "0"。

同时,为了保证按钮的功能正常,在 Main.storyboard 中将四个按钮的 tag 设置为 1、2、3、4,表示加、减、乘、除四种运算符。

### 测试应用程序

运行应用程序,进行加、减、乘、除四种基本运算,测试应用程序的功能是否正常。

## 总结

本教程介绍了 Objective-C 的基础语法和面向对象特性,以及常用的 Foundation、UIKit 和 Core Data 框架。并且给出了一个简单的运算器应用程序的案例说明,希望对初学 Objective-C 的开发者有所帮助。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(102) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部