【初识Objective-C】

Objective-C学习

什么是OC

OC是Objective-C的缩写,它是一种在C语言的基础上扩展的面向对象编程语言。Objective-C在1980年代由Stepstone公司的Brad Cox和Tom Love开发。他们的目标是将一些面向对象的功能添加到C语言中,使软件开发更加灵活和模块化

OC的特性

面向对象的特性:Objective-C支持类的概念,包括继承、封装和多态。它也支持动态类型和动态绑定。

消息传递:Objective-C使用消息传递模型,而不是像大多数面向对象语言那样使用方法调用。这使得程序具有更大的灵活性,因为消息可以在运行时动态解析。

Cocoa和Cocoa Touch:Objective-C是Apple开发OS X和iOS操作系统的主要语言,它们的主要应用程序框架Cocoa和Cocoa Touch是用Objective-C编写的。

内存管理:Objective-C提供自动引用计数(ARC)来自动化内存管理,从而减少了手动内存管理的负担。

OC跑的第一个程序helloworld

objectivec 复制代码
// 导入Foundation框架
#import <Foundation/Foundation.h>

// 主函数,程序入口
int main(int argc, const char * argv[]) {
    
    // 创建自动释放池,管理内存
    @autoreleasepool {
        // 打印输出"Hello, World!"
        NSLog(@"Hello, World!");
    }
    return 0;
}

先导入了Foundation框架,然后定义了程序的入口点main函数。英文中的@autoreleasepool是一个自动释放池,它可以自动管理内存。NSLog函数用于在控制台输出字符串,类似于C语言的printf

OC的一些基础知识

标识符

在Objective-C编程中,标识符是用来识别变量、函数、或任何其他用户定义的项目的名称。一个Objective-C标识符是一个字母或下划线开头的名字,后面跟着零个或多个字母、下划线和数字。注意,Objective-C是区分大小写的,所以在命名标识符时需要特别注意。

Objective-C有两种类型的标识符:

内部标识符:这些标识符以一个字母或下划线开始,其后跟着任何数量的字母、数字或下划线。

外部标识符:这些标识符以一个字母开始,其后跟着任何数量的字母、数字或下划线。

以下是一些Objective-C标识符的示例:

Valid: myVariableName, _myVariable, myVariable1

Not valid: 123myVariable (开头不能是数字), my Variable(不能包含空格), my-Variable(不能包含非数字/字母/下划线的字符)

标识符的选择非常重要,一个好的标识符名称会让你的代码更容易阅读和理解。当选择标识符名称时,最好选择有意义的名称,让其他人阅读你的代码时能够理解他们的用途。

OC关键字

数据类型

Objective-C支持C语言的所有基本数据类型,并添加了一些新的数据类型。以下是一些常见的数据类型:

整数类型:

---int:为一个整数,占用4个字节,取值范围通常为-2147483648至2147483647。

---short:为一个短整数,通常占用2个字节。

---long:为一个长整数,在64位系统中,占用8个字节,在32位系统中占用4个字节。

----long long:为一个长整数,占用8个字节。

无符号整数类型(它们都是正数或零):

---unsigned int

---unsigned short

---unsigned long

---unsigned long long

浮点类型:

---float:是一个浮点,占用4个字节。精确到小数点后6位左右。

---double:占用8个字节。精确到小数点后15位左右。

---long double:占用16个字节。

字符型:

---char:占用1个字节。可以存取单个字符。

其他:

---bool:布尔型。它可以取两个值,YES和NO。

---void:表示没有值或者类型。

---id:用于存储任意类型的对象。(类似Python的object或C++的auto)

除了这些基本数据类型,Objective-C还支持对象类型,如NSString、NSArray、NSDictionary等等。还可以定义你自己的类作为新的数据类型使用。

字符型

在Objective-C中,字符串是一串字符的集合。可以通过两种不同的方式处理字符串。

c字符串

C字符串:Objective-C继承于C语言,所以C字符串是允许的。一个C字符串以'\0'为结束标志。例如

objectivec 复制代码
char *myCString = "This is a C String";

NSString:这是Objective-C的字符串类,它提供了一组更加强大的字符串处理功能。

创建NSString对象的方法很多。您可以创建一个NSString对象并立即给它赋值。例如:

objectivec 复制代码
NSString *myString = @"This is an NSString object";

NSString类有很多方法可以对字符串进行操作,包括计算字符串长度、比较两个字符串、将字符串转换为大写或小写,等等。例如:

objectivec 复制代码
NSString *myString = @"Hello, World!";
NSUInteger myStringLength = [myString length];  // 获取字符串长度

NSString *uppercaseString = [myString uppercaseString];  // 转换为大写

if ([myString isEqualToString:@"Hello, World!"]) {
    NSLog(@"The strings are equal.");
} else {
    NSLog(@"The strings are not equal.");
}
为什么NSString类型定义时前面要加@

在Objective-C中,@符号用于标记编译器指令。在你提供的示例str = @"5大于3"中,@是一个前缀,它告诉编译器将双引号内的文本视为一个NSString实例而非C语言的字符串。 所以,@"5大于3"实际上是创建了一个NSString对象,该对象包含文本"5大于3"。在Objective-C中,你通常会看到@用于这样的字符串定义,或者用于定义数字、字典、数组等。例如:

objectivec 复制代码
NSNumber *myNumber = @3;
NSArray *myArray = @[@1, @2, @3];
NSDictionary *myDict = @{@"key": @"value"};

在每种情况下,@都是告诉编译器创建一个Objective-C对象,而不是一个简单的C类型。

和普通的c对象有什么区别

Objective-C是一种纯面向对象的程序设计语言,它在C语言的基础上增加了类和对象的概念。因此,Objective-C的对象和C语言中的简单数据类型或结构有一些明显的区别。

对象与数据类型:在C语言中,我们通常处理的是简单的数据类型,如int、float、char等,以及复合的数据类型,如结构体(struct)。而在Objective-C中,我们处理的是对象,这些对象可能是字符串(NSString)、数字(NSNumber)、数组(NSArray)等。

方法与函数:在C语言中,我们通过函数来操作数据。而在Objective-C中,我们使用对象的方法来进行操作。

内存管理:Objective-C提供了对内存管理的更高级的抽象,通过引用计数和自动释放池(autorelease pools)来自动管理内存。而在C语言中,你必须手动地分配和释放内存。

使用@符号:只有在Objective-C中我们才会看到@符号的使用,它用于创建不同类型的Objective-C对象。

更多特性:Objective-C还提供了一些面向对象编程的高级特性,如继承、封装和多态。

一些基础知识

if语句

Objective-C中的if语句用于根据特定的条件执行不同的代码段。其语法结构与C语言和其他许多编程语言相同:

objectivec 复制代码
if (condition) {
    // 这里是当条件为真(即,结果为YES)时执行的代码
}

还可以添加一个 else 部分来在条件为假时执行代码:

objectivec 复制代码
if (condition) {
    // 这里是当条件为真时执行的代码
} else {
    // 这里是当条件为假时执行的代码
}

可以使用 else if 来链接多个条件

objectivec 复制代码
if (condition1) {
    // 当条件1为真时执行的代码
} else if (condition2) {
    // 当条件1为假,但条件2为真时执行的代码
} else {
    // 当条件1和条件2都为假时执行的代码
}

让我们来看一个具体的示例。假设你有一个int型的变量score,你可以使用if-else语句来判断分数的等级:

objectivec 复制代码
int score = 85;

if (score >= 90) {
    NSLog(@"Your grade is A.");
} else if (score >= 80) {
    NSLog(@"Your grade is B.");
} else if (score >= 70) {
    NSLog(@"Your grade is C.");
} else {
    NSLog(@"Your grade is F.");
}

switch语句

在Objective-C中,switch语句用于根据表达式或变量的值选择多个代码块之一来执行。其基本语法如下:

objectivec 复制代码
switch (expression) {
    case value1:
        // 当表达式等于value1时执行的代码
        break;
    case value2:
        // 当表达式等于value2时执行的代码
        break;
    // 可以有任意数量的case语句
    default: 
        // 当表达式的值与所有case都不匹配时执行的代码
}

需要注意的是,每一个case后面的代码块末尾通常都需要一个break语句,break语句的作用是跳出switch语句,防止代码进入下一个case。

给你看一个具体的例子,假设有一个变量day代表星期几,你可以使用switch语句来打印出这一天的名称:

objectivec 复制代码
int day = 3; 
switch (day) {
    case 1:
        NSLog(@"Monday");
        break;
    case 2:
        NSLog(@"Tuesday");
        break;
    case 3:
        NSLog(@"Wednesday");
        break;
    case 4:
        NSLog(@"Thursday");
        break;
    case 5:
        NSLog(@"Friday");
        break;
    case 6:
        NSLog(@"Saturday");
        break;
    case 7:
        NSLog(@"Sunday");
        break;
    default:
        NSLog(@"You entered an invalid number for day of the week.");
        break;
}

三种循坏语句

for循环:用于固定次数的循环

objectivec 复制代码
    for (初始化; 循环条件; 循环后的操作) {
        // 循环执行的代码
    }

例如,打印从1到5的数字:

objectivec 复制代码
    for (int i = 1; i <= 5; i++) {
        NSLog(@"%d", i);
    }

while循环:当满足某个条件时反复执行循环

objectivec 复制代码
    while (循环条件) {
        // 循环执行的代码
    }

例如,打印小于等于5的数字:

objectivec 复制代码
    int i = 1;
    while (i <= 5) {
        NSLog(@"%d", i);
        i++;
    }

do-while循环:与while循环类似,只是先执行一次循环体,然后再检查循环条件

objectivec 复制代码
    do {
        // 循环执行的代码
    } while (循环条件);

例如,至少打印一次数字,然后再检查i是否小于等于5:

objectivec 复制代码
    int i = 1;
    do {
        NSLog(@"%d", i);
        i++;
    } while (i <= 5);

以上就是Objective-C中的三种主要的循环结构,它们各有应用场景,可以根据需要在代码中选用。

== 希望大家一起加油==

相关推荐
HerayChen2 小时前
HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac
android·macos·智能手机
hairenjing11232 小时前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机
小李飞刀李寻欢5 小时前
Mac电脑如何解压rar压缩包
macos·rar·解压
Java小白笔记5 小时前
Mac中禁用系统更新
macos
AndyFrank5 小时前
mac crontab 不能使用问题简记
linux·运维·macos
Mac新人5 小时前
一招解决Mac没有剪切板历史记录的问题
macos·mac
王拴柱5 小时前
Mac保护电池健康,延长电池使用寿命的好方法
macos·mac
daa205 小时前
macos中安装和设置ninja
macos
Java小白笔记6 小时前
Mac解决 zsh: command not found: ll
macos
小钱c77 小时前
Mac下安装Apache JMeter并启动
jmeter·macos·apache