【初识Objective-C】

Objective-C学习

  • 什么是OC
    • OC的特性
    • OC跑的第一个程序helloworld
  • OC的一些基础知识
    • 标识符
    • OC关键字
    • 数据类型
    • 字符型
      • c字符串
        • 为什么NSString类型定义时前面要加@
        • 和普通的c对象有什么区别
  • 一些基础知识
    • if语句
    • switch语句
    • 三种循坏语句
      • for循环:用于固定次数的循环
      • while循环:当满足某个条件时反复执行循环
    • do-while循环:与while循环类似,只是先执行一次循环体,然后再检查循环条件

什么是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

// 导入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’为结束标志。例如

char *myCString = "This is a C String";

NSString:这是Objective-C的字符串类,它提供了一组更加强大的字符串处理功能。
创建NSString对象的方法很多。您可以创建一个NSString对象并立即给它赋值。例如:

NSString *myString = @"This is an NSString object";

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

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中,你通常会看到@用于这样的字符串定义,或者用于定义数字、字典、数组等。例如:

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语言和其他许多编程语言相同:

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

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

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

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

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

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

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语句用于根据表达式或变量的值选择多个代码块之一来执行。其基本语法如下:

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

需要注意的是,每一个case后面的代码块末尾通常都需要一个break语句,break语句的作用是跳出switch语句,防止代码进入下一个case。
 给你看一个具体的例子,假设有一个变量day代表星期几,你可以使用switch语句来打印出这一天的名称:

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循环:用于固定次数的循环

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

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

    for (int i = 1; i <= 5; i++) {
        NSLog(@"%d", i);
    }

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

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

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

    int i = 1;
    while (i <= 5) {
        NSLog(@"%d", i);
        i++;
    }

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/692892.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小成代码路的错误2

文章目录 1.继承中子类和父类之间的隐藏&#xff1b;只要函数名字相同就会出现隐藏&#xff1b;这里和函数的参数无关&#xff1b;继承的析构函数会自动先调用子类的析构函数再调用父类的析构函数&#xff1b;不需要写仍和的父类的析构函数&#xff1b;继承中的静态成员在父类中…

SpringBoot3学习总结

一.SpringBoot3介绍 (一)主要目标 SpringBoot的主要目标是&#xff1a; 为所有 Spring 开发提供更快速、可广泛访问的入门体验。 开箱即用&#xff0c;设置合理的默认值&#xff0c;但是也可以根据需求进行适当的调整 提供一系列大型项目通用的非功能性程序&#xff08;如…

第二届黄河流域团队赛个人wp

个人wp web 两个题都几乎是网上的原题&#xff0c;不想多说了&#xff0c;放个链接&#xff0c;重点记录一下自己第一次遇到的misc 冰蝎流量分析 web1 https://blog.csdn.net/qq_51768842/article/details/125153850 web2 https://blog.csdn.net/m0_73512445/article/detai…

当我拿到百度文心智能体大赛top1后,我又开发了...

目录 一、写在前面 二、代码助手 三、关于智能体 四、写在后面 一、写在前面 在不久前结束的文心智能体大赛&#xff08;第一期&#xff09;中&#xff0c;我有幸凭借一款名为恋爱助手的智能体斩获了大赛的桂冠。这个成绩&#xff0c;既是对我努力的认可&#xff0c;也是对…

【Java】试问:你小汁就是我的代理类吗?(动态代理)

【Java】试问&#xff1a;你小汁就是我的代理类吗&#xff1f;&#xff08;动态代理&#xff09; 文章目录 【Java】试问&#xff1a;你小汁就是我的代理类吗&#xff1f;&#xff08;动态代理&#xff09;代理模式啥是代理模式&#xff1f;代理模式是嘎哈的&#xff1f;1. 日志…

Cesium开发环境搭建(一)

1.下载安装Node.js 进入官网地址下载安装包 Node.js — Download Node.js https://cdn.npmmirror.com/binaries/node/ 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 安装完成后&#xff0c;WINR&#xff0c;输入node --version&#xff0c;显示…

360数字安全:2024年4月勒索软件流行态势分析报告

勒索软件传播至今&#xff0c;360 反勒索服务已累计接收到数万勒索软件感染求助。随着新型勒索软件的快速蔓延&#xff0c;企业数据泄露风险不断上升&#xff0c;勒索金额在数百万到近亿美元的勒索案件不断出现。勒索软件给企业和个人带来的影响范围越来越广&#xff0c;危害性…

VSFT匿名用户访问-设置

1、先备份配置档 cp -av /etc/vsftpd/vsftpd.conf{,_bak} 2、编辑配置档&#xff0c;修改以下参数 vim /etc/vsftpd/ vsftpd.conf anonymous_enableYES -----允许匿名用户访问 anon_upload_enableYES -----允许匿名用户上传 anon_mkdir_write_enableYES …

算法训练营day03--203.移除链表元素+707.设计链表+206.反转链表

一、203.移除链表元素 题目链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/ 文章讲解&#xff1a;https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html 视频讲解&#xff1a;https://www.bilibili.com…

线性预测器的等价性

摘要 尽管线性模型很简单&#xff0c;但它在时间序列预测中表现良好&#xff0c;即使是在与更深入、更昂贵的模型竞争时也是如此。已经提出了许多线性模型的变体&#xff0c;通常包括某种形式的特征归一化&#xff0c;以提高模型的泛化。本文分析了用这些线性模型体系结构可表…

IO多路复用详解

1. 概念 IO多路复用也称IO多路转接&#xff0c;它是一种网络通信的手段&#xff08;机制&#xff09;&#xff0c;通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的&#xff0c;一旦检测到有文件描述符就绪&#xff08; 可以读数据或者可以写数据&#xff09;程序的…

【机器学习】机器学习引领AI:重塑人类社会的新纪元

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀机器学习引领AI &#x1f4d2;1. 引言&#x1f4d5;2. 人工智能&#xff08;AI&#xff09;&#x1f308;人工智能的发展&#x1f31e;应用领…

超详解——python数字和运算_——小白篇

目录 1.的位运算 2. 常用内置函数/模块 math模块&#xff1a; random模块&#xff1a; decimal模块&#xff1a; 3.内置函数&#xff1a; 总结&#xff1a; 1.的位运算 位运算是对整数在内存中的二进制表示进行操作。Python支持以下常见的位运算符&#xff1a; 按位与&…

VSFTP安装部署

1、检查vsftpdL软件是否安装 rpm –q vsftpd 2、挂载安装盘rpm安装包 mkdir /mnt/iso mount –o loop linux.iso /mnt/iso #挂载光盘鏡像文件 3、安装vsftpd 另外&#xff0c;如果电脑可以正连网&#xff0c;可以使用yum –y install vsftpd进行安装 rpm -ivh /mnt/iso…

相机标定中一些细节--畸变模型和参数

张正友标定方法做相机标定的主要过程是先估计每张图片的单应性矩阵&#xff0c;然后通过这一系列的单应性矩阵估计出内外参数初值&#xff0c;最后再考虑畸变模型的加入进行非线性优化。同时优化内参、外参和畸变参使得重投影误差最小。 镜头的畸变表现出来的非线性关系&#…

读AI未来进行式笔记07量子计算

1. AI审讯技术 1.1. 发明者最初的目的是发明一种能够替代精神药物&#xff0c;为人类带来终极快乐的技术 1.1.1. 遗憾的是&#xff0c;他找到的只是通往反方向的大门 1.2. 通过非侵入式的神经电磁干扰大脑边缘系统&#xff0c;诱发受审者最…

LibreOffice电子表格如何实现快速筛选并将结果放到新的工作表

如果是在excel或者wps中&#xff0c;可能大家都习惯了自动筛选&#xff0c;然后复制到新的工作表或者删除掉复制内容的办法。但是在LibreOffice中&#xff0c;经测试&#xff0c;大数据表的删除或者复制是非常慢的。这也是很多人放弃LibreOffice的原因之一。那么我们如何快速筛…

AutoCAD Mechanical机械版专业的计算机辅助设计软件安装包下载安装!

AutoCAD机械版作为一款专业的计算机辅助设计软件&#xff0c;不仅具备卓越的二维绘图功能&#xff0c;更是拥有令人瞩目的3D建模工具&#xff0c;为机械设计师们提供了前所未有的创作空间。 在AutoCAD机械版的3D建模环境中&#xff0c;用户可以借助一系列简洁明了的命令&#…

Chrome跳转新的标签页自动打开控制台设置方法

Chrome跳转新的标签页自动打开控制台设置方法 文章目录 Chrome跳转新的标签页自动打开控制台设置方法1. 首先打开控制台2. 点击设置3. 选择Preferences -> Global -> 选中 Auto-open DevTools for popups4. 回到控制台勾选 preserve log保留日志![请添加图片描述](https:…

k8s之deployments相关操作

k8s之deployments相关操作 介绍 官网是这样说明如下&#xff1a; 一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。 你负责描述 Deployment 中的目标状态&#xff0c;而 Deployment 控制器&#xff08;Controller&#xff09; 以受控速率更改实际状态&#xf…