当前位置: 首页 > news >正文

【初识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中的三种主要的循环结构,它们各有应用场景,可以根据需要在代码中选用。

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

相关文章:

【初识Objective-C】

Objective-C学习 什么是OCOC的特性OC跑的第一个程序helloworld OC的一些基础知识标识符OC关键字数据类型字符型c字符串为什么NSString类型定义时前面要加和普通的c对象有什么区别 一些基础知识if语句switch语句三种循坏语句for循环&#xff1a;用于固定次数的循环while循环&…...

从功能性磁共振成像(fMRI)数据重建音频

听觉是人类最重要的感官之一&#xff0c;它负责接收外部的听觉刺激&#xff0c;并将这些信息传递给大脑进行处理和理解。研究人员正致力于从神经科学和计算机科学两个领域探索人脑的听觉感知机制。一个关键目标是从人脑中解码神经信息&#xff0c;并重建原始的刺激。常见的大脑…...

前端Vue小兔鲜儿电商项目实战Day04

一、二级分类 - 整体认识和路由配置 1. 配置二级路由 ①准备组件模板 - src/views/SubCategory/index.vue <script setup></script><template><div class"container"><!-- 面包屑 --><div class"bread-container">…...

TypeScript的简单总结

TypeScript 深度总结 引言 TypeScript&#xff0c;作为JavaScript的一个强类型超集&#xff0c;由Microsoft在2012年推出并维护至今&#xff0c;它不仅继承了JavaScript的所有特性&#xff0c;还引入了静态类型系统和其他现代编程特性&#xff0c;为开发者提供了一个更安全、…...

I.MX6ULL UART 串口通信实验

系列文章目录 I.MX6ULL UART 串口通信实验 I.MX6ULL UART 串口通信实验 系列文章目录一、前言二、I.MX6U 串口简介2.1 UART 简介2.2 I.MX6U UART 简介 三、硬件原理分析四、实验程序编写五、编译下载验证5.1编写 Makefile 和链接脚本5.2 编译下载 一、前言 不管是单片机开发还…...

systemctlm-cosim-demo项目分析

概述 systemctlm-cosim-demo项目是Xilinx的systemc库的demo工程。 环境安装 qemu安装 cd xilinx_proj/Downloads git clone https://github.com/Xilinx/qemu.git cd qemu git checkout 74d70f8008# Configure and build # zynq7000 # ./configure --target-list"arm-s…...

SQL学习小记(四)Navicat中连接Oracle数据库的详细步骤

五分钟解决Oracle连接问题&#xff1a;DPI-1047: Cannot locate a 64-bit Oracle Client library: “The specified module could not be SQL学习小记&#xff08;四&#xff09;Navicat中连接Oracle 1. 错误信息2. 解决过程2.1.版本查询2.2. 官网下载2.3. 设置Navicat的oci环…...

mysql聚簇索引

1.聚簇索引是物理索引&#xff0c;数据在表里是按顺序存储的&#xff0c;物理上是连续的&#xff0c;一般选主键id作为聚簇索引&#xff0c;且一张表里只能有一个聚簇索引。 2.只有InnoDB支持聚簇索引。 3.非聚簇索引是逻辑索引&#xff0c;将数据的某个字段抽取出来组成独立的…...

【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解

目录 引言 一、存储卷 &#xff08;一&#xff09;存储卷定义 &#xff08;二&#xff09;存储卷的作用 1.数据持久化 2.数据共享 3.解耦 4.灵活性 &#xff08;三&#xff09;存储卷的分类 1.emptyDir存储卷 1.1 定义 1.2 特点 1.3 示例 2.hostPath存储卷 2.1 …...

Adobe Premiere 专业视频编辑软件资源下载安装!pr 2024最新版软件分享

Adobe Premiere&#xff0c;作为一款非线性视频编辑软件&#xff0c;它打破了传统线性编辑的限制&#xff0c;为用户提供了更加灵活和自由的创作空间。 在电影制作领域&#xff0c;Adobe Premiere的出色表现赢得了众多导演和剪辑师的青睐。其强大的编辑功能使得影片的剪辑过程更…...

c++------类和对象(下)包含了this指针、构造函数、析构函数、拷贝构造等

文章目录 前言一、this指针1.1、this指针的引出1.2、 this指针的特性 二、类的默认的六个构造函数2.1、构造函数简述2.2构造函数 三、析构函数3.1、析构函数引出3.2、特点&#xff1a; 四、拷贝构造4.1、引入4.2、特征&#xff1a;4.3、默认拷贝构造函数 总结 前言 在本节中&a…...

git版本控制工具常用命令

一、本地仓库管理 push 向远程推送代码 pulll 拉取代码 二、远程仓库管理 三、分支操作 本地主分支master 远程主分支main head指向当前分支 查看&#xff1a;git branch 创建分支: git branch 名字 切换分支&#xff1a;git checkout 名字 合并分支&#xff1a;git…...

展示广告多模态召回模型:混合模态专家模型

✍&#x1f3fb; 本文作者&#xff1a;俊广、卓立、凌潼、青萤 1. 背景 随着在搜索、推荐、广告技术上多年的迭代积累&#xff0c;业界逐步形成了召回&#xff08;匹配&#xff09;、粗排、精排这一多阶段的系统架构。其中&#xff0c;召回作为链路的最前端&#xff0c;决定了业…...

好的一些网安资源

镜像&#xff1a;https://msdn.itellyou.cn/ 编程学习{ 菜鸟教程&#xff1a;https://www.runoob.com/ w3school&#xff1a;https://www.w3school.com.cn/ https://www.dotcpp.com/ http://zh.cppreference.com/ https://beginnersbook.com/ https://www.ai8py.com/ }…...

Linux chmod 命令

Linux chmod 命令 在 Linux 操作系统中&#xff0c;chmod 命令是非常重要的。它可以用于修改文件和目录的访问权限&#xff0c;以及控制用户对系统资源的访问。在这篇博客中&#xff0c;我们将深入探讨 chmod 命令的使用方法&#xff0c;以及如何使用它来管理文件和目录的访问…...

SDL教程(二)——Qt+SDL播放器

前言 ​ 这篇文章主要是使用SDL来打开视频&#xff0c;显示视频。后续会再继续使用SDL来结合FFmpeg。来能够直接使用网上的demo进行学习。 正文 一、环境 Qt 5.15.2 MSVC2019 64bit Win11 二、Qt搭建SDL Qt搭建&#xff0c;我觉得相比用VS2019来说&#xff0c;更为方便&…...

Java面试题:解决Redis缓存击穿问题

缓存击穿 当一个key过期时,需要对这个key进行数据重建 在重建的时间内如果有大量的并发请求进入,就会绕过缓存进入数据库,会瞬间击垮DB 重建时间可能因为数据是多个表的混合结果需要分头统计而延长,从而更容易出现缓存击穿问题 缓存击穿的解决方案 添加互斥锁 先查询缓存…...

Redis的哨兵模式

什么是哨兵模式 Redis的哨兵模式&#xff08; Sentinel mode &#xff09;是⼀个⾼可⽤解决⽅案&#xff0c;当运⾏多个 Redis 实例并且需要⾃动故障转移时&#xff0c;哨兵模式⾮常有⽤。 在⼀个典型的哨兵模式下&#xff0c;⾄少需要3 个哨兵实例来避免 “ 脑裂 ” &#xff…...

Hadoop伪分布式安装教程

Hadoop伪分布式安装教程 一、安装背景1.1 软件列表1.2 系统软件列表 二、安装Hadoop2.1 安装 Java 环境2.1.1 前期准备2.1.2 文件传输2.1.3 解压文件2.1.4 配置 jdk 的环境变量2.1.5 输入 java、javac、java -version 命令检验 jdk 是否安装成功 2.2 Hadoop 下载地址[hadoop](h…...

Day43 代码随想录打卡|二叉树篇---左叶子之和

题目&#xff08;leecode T404&#xff09;&#xff1a; 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 方法&#xff1a; 迭代法&#xff1a;计算所有的左叶子节点&#xff0c;那我们就必然要找到所有的左叶子节点。那么怎么找呢&#xff1f;如何针对cur->l…...

微信小程序动画

微信小程序动画属性&#xff1a;提升用户体验的利器 引言 随着移动互联网技术的快速发展&#xff0c;微信小程序已经成为开发者和用户的热门选择。其轻便、快捷、即用即走的特点使得它在各种场景中都有广泛的应用。而动画作为一种重要的视觉元素&#xff0c;在增强用户体验方…...

js, ellipsis属性, 超出宽度自动省略... , 并且显示2行

overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; text-overflow:ellipsis;...

ucharts自定义添加tooltip悬浮框显示项内容且换行

欢迎点击领取 -《前端开发面试题进阶秘籍》&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的&#x1fa9c; 一、需求描述分析 1、小程序上实现图表的绘制&#xff0c;多条线路&#xff0c;不同颜色&#xff0c;悬浮框对应内容不同数据进行处理 2…...

Mongo 地理位置查询:海量密集点转换成聚合信息

通俗来说&#xff1a;将地图上的海量密集点通过网格分割的方式实现聚合&#xff1b; 需求&#xff1a;用mongo实现设备地理位置聚合查询 &#xff1a;多边形&#xff0c;矩形查询; 背景&#xff1a;上万设备数据量 目的&#xff1a;分享Mongo地理位置查询&#xff0c;以及文…...

bpmn+vue 中文文档

1.初始化项目 <script> import BpmnModeler from bpmn-js/lib/Modeler import { xmlStr } from /mock/xmlStr export default {mounted () {this.init()},methods: {init () {// 获取到属性ref为“canvas”的dom节点const canvas this.$refs.canvas// 建模const custom…...

React Router v5 和 v6 中,路由对象声明方式有什么区别?

一、在React Router 6.x开始&#xff0c;路由对象的声明需要引用RouteObject。 import { RouteObject } from react-router-dom;const routes: RouteObject[] [{path: /,element: <Home />},{path: /about,element: <About />},// ... ];二、一些老项目使用的是R…...

【全开源】知识库文档系统(ThinkPHP+FastAdmin)

&#x1f4da;知识库文档系统&#xff1a;解锁知识的无限可能 一款基于ThinkPHPFastAdmin开发的知识库文档系统&#xff0c;可用于企业工作流程的文档管理&#xff0c;结构化记录沉淀高价值信息&#xff0c;形成完整的知识体系&#xff0c;能够轻松提升知识的流转和传播效率&a…...

Python赋能自然语言处理,解锁通往AI的钥匙

NLTK&#xff08;Natural Language Toolkit&#xff09;是一个用于 Python 的自然语言处理库,提供了丰富的工具和资源,帮助处理、分析和理解人类语言数据.它广泛应用于学术研究、教育和商业应用中. 安装 #首先要安装 NLTK&#xff1a;pip install nltk安装完成后,还需要下载…...

Ktor库的高级用法:代理服务器与JSON处理

在现代网络编程中&#xff0c;Ktor是一个高性能且易于使用的框架&#xff0c;它提供了对异步编程、WebSockets、HTTP客户端和服务器等特性的原生支持。Ktor是使用Kotlin语言编写的&#xff0c;充分利用了Kotlin的协程特性来简化异步编程。本文将深入探讨Ktor库的高级用法&#…...

VS2017配置OpenCV4.5.1

VS2017配置OpenCV 一、下载OpenCV二、配置OpenCV的电脑环境变量三、配置visual Studio添加路径复制文件到C盘 四、如何使用注意运行时选择Debug x64 五、报错&#xff1a;VSOpencv出现&#xff1a;xxx处有未经处理的异常: Microsoft C 异常: cv::Exception&#xff0c;位于内存…...

做网站的公司有/app开发多少钱

总时间限制: 1000ms内存限制: 65536kB描述国王将金币作为工资&#xff0c;发放给忠诚的骑士。第一天&#xff0c;骑士收到一枚金币&#xff1b;之后两天&#xff08;第二天和第三天&#xff09;里&#xff0c;每天收到两枚金币&#xff1b;之后三天&#xff08;第四、五、六天&…...

做外国网站/百度官网入口链接

记录英语单词时&#xff0c;想把英语和中文翻译分别对齐&#xff0c;有些人写代码喜欢把变量按这种方式对齐。在网上没搜到相关方法&#xff0c;于是自己试着写代码去实现&#xff0c;原本以为很简单&#xff0c;写的时候才发现有不少问题。先看效果&#xff1a; 普通的 对齐前…...

企业做网站公司怎么样/成都seo

var expression /pattern/flags; 以上为创建正则表达式格式&#xff0c;斜线包围的为正则表达式&#xff0c;flags 有三个值可以选择本文地址&#xff1a;http://www.cnblogs.com/veinyin/p/7607769.html 1 flags 可选值&#xff1a; g &#xff1a; 全局 ( global ) 模式&a…...

做门户网站 cms/线上营销渠道

一&#xff0c;异常体系图 现实生活中的很多病况从面向对象的角度考虑也是一类事物&#xff0c;可以定义为类。 java中可以通过类对这一类不正常的现象进行描述&#xff0c;并封装为对象。 1. java的异常体系包含在java.lang这个包默认不需要导入。 2. java异常体系图 |—…...

wap网站建设学什么/谷歌seo详细教学

栈和堆 大家都知道&#xff0c;JS中的数据类型包括两种&#xff1a;简单数据类型&#xff08;String、Number、Boolean、undefined、null&#xff09;和复杂数据类型&#xff08;object&#xff09;。 在内存中分为栈区&#xff08;stack&#xff09;和堆区&#xff08;heap&am…...

潍坊设计网站/深圳市企业网站seo

去除inline-block元素间间距的N种方法by zhangxinxu from http://www.zhangxinxu.com本文地址&#xff1a;http://www.zhangxinxu.com/wordpress/?p2357 一、现象描述 真正意义上的inline-block水平呈现的元素间&#xff0c;换行显示或空格分隔的情况下会有间距&#xff0c;很…...