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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低功耗,低噪声 CMOS 轨到轨输入输出运算放大器

产品简述 MS6001/2/4 运算放大器具有极低功耗&#xff0c;轨到轨输入输出&#xff0c;低 的输入电压和低的电流噪声。具体表现在可工作在幅度为 1.8V 到 5V 的单电源或者双电源条件&#xff0c;低功耗和低噪声使得 MS6001/2/4 能够用在可移动设备上&#xff0c;输入输…

Go 实现的小型web server,可以通过调用api来控制和消耗 CPU 占比。通常用于测试系统负载和性能。

说明 Go 实现的小型web server&#xff0c;可以通过调用api来控制和消耗 CPU 占比。通常用于测试系统负载和性能。 代码在下面 编译和运行 在终端中编译代码&#xff1a; go build 运行程序,然后调用api&#xff0c;例如&#xff1a; ./tools_cpu_burner_by_api再打开另一个s…

低代码/无代码可以降低程序员哪些门槛

低代码/无代码开发平台是一种新兴的软件开发模式&#xff0c;它通过图形化界面、拖拽式操作等方式&#xff0c;快速构建应用程序&#xff0c;从而降低了开发者的准入门槛。这种模式对程序员来说&#xff0c;不仅可以提高开发效率&#xff0c;还可以在某些情况下促进业务人员成为…

目标检测数据集 - 打架检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;打架检测数据集&#xff0c;真实监控场景高质量打架图片数据&#xff0c;涉及场景丰富&#xff0c;比如街道场景打架数据、酒吧场景打架数据、商店场景打架数据、公交车场景打架数据、监狱场景打架数据、空旷地打架数据、两人打架数据、多人群殴数据等。…

面试官:如何实现大文件切片上传?

公众号&#xff1a;程序员白特&#xff0c;关注我&#xff0c;每天进步一点点~ 前端上传文件很大时,会出现各种问题,比如连接超时了,网断了,都会导致上传失败,这个时候就需要将文件切片上传,下面我们就来学习一下如何使用vue实现大文件切片上传吧 大文件为什么要切片上传 前端…

Python filter()用法:深入解析与实战应用

Python filter()用法&#xff1a;深入解析与实战应用 在Python编程中&#xff0c;filter() 函数是一个内置的高阶函数&#xff0c;它用于过滤序列&#xff0c;过滤掉不符合条件的元素&#xff0c;返回由符合条件元素组成的新列表。该函数在数据处理和筛选时非常有用&#xff0…

计算机系统基础知识-经典题目

【第1题】 对计算机评价的主要性能指标有时钟频率、 (1) 、运算精度和内存容量等。对数据库管理系统评价的主要性能指标有 (2) 、数据库所允许的索引数量和最大并发事务处理能力等。 (1) A.丢包率 B.端口吞吐量 C.可移植性 D.数据处理速率 (2) A.MIPS B.支持协议和标准 C.最大…

【设计模式】工厂模式(创建型)⭐⭐⭐

文章目录 1.概念1.1 什么是工厂模式1.2 优点与缺点 2.实现方式2.1 简单工厂模式&#xff08;Simple Factory&#xff09;2.2 简单工厂模式缺点2.3 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 3. Java 哪些地方用到了工厂模式4. Spring 哪些地方用到了工厂模…

【SpringBoot】SpringBoot同时可以处理多少请求

目录 问题Web三大容器三者区别TomcatJetty小结 最大连接数和最大等待数同时处理请求数拓展&#xff1a;设置Web容器设置容器为Jetty设置容器为Undertow 问题 之前看到过一个面试题&#xff1a;SpringBoot同时可以处理多少请求&#xff1f; 准确的来说&#xff0c;Spring Boot…

mysql聚簇索引

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

JVM常用概念之锁粗化和循环

1.什么是锁粗化 锁粗化一般指有效地合并几个相邻的锁定块&#xff0c;从而减少锁定开销。如下述代码所示&#xff1a; 锁粗化前代码&#xff1a; synchronized (obj) {// statements 1 } synchronized (obj) {// statements 2 }锁粗化后代码&#xff1a; synchronized (obj)…

pycharm绘图时中英文不能同时出现 中文出现小框框的问题解决

# 设置字体为微软雅黑&#xff0c;正确显示负号 plt.rcParams[font.sans-serif] [Microsoft YaHei] plt.rcParams[axes.unicode_minus] False

Python 组合序号

import pandas as pd # 创建一个示例数据框 data { group: [A, A, A, B, B, C, C, C, C], value: [3, 1, 2, 5, 4, 6, 9, 7, 8] } df pd.DataFrame(data) # 先按group分组&#xff0c;再按value列升序排序 df_sorted_asc df.sort_values(by[group, value]) # 使…

如何使用vsCode打开intel D435i深度相机

一、下载并安装相机SDK文件 1.SDK下载地址&#xff1a; Release Intel RealSense™ SDK 2.0 (v2.54.2) IntelRealSense/librealsense GitHub 2.下载后&#xff0c;双击即可安装 3.环境配置 1&#xff09;window的开始菜单&#xff0c;搜索环境变量&#xff0c;选择编辑系…

LitCTF2024部分wp

litctf wp 第一次ak了web和misc&#xff0c;非常激动&#xff0c;感谢lictf给我这个机会 最终成果 全靠队里的密码逆向✌带飞。一个人就砍了近一半的分数 这里是我们队的wp web exx 题目名反过来就是xxe&#xff0c;考察xxe&#xff0c;查看登录的数据包 发现传的就是xml…

机器学习中的泛化与适应:深入理解域泛化、域适应、少样本学习、零样本学习、开放世界识别与开放词汇识别

机器学习中的泛化与适应&#xff1a;深入理解域泛化、域适应、少样本学习、零样本学习、开放世界识别与开放词汇识别 &#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;A…

Java Web学习笔记8——表单

表单标签&#xff1a; 场景&#xff1a;在网页中主要负责数据采集功能&#xff0c;如注册、登录等数据采集。 标签&#xff1a;<form> 表单项、表单元素&#xff1a; 不同类型的input元素、下拉列表、文本域等。 <input>: 定义表单项、通过type形式控制输入形…

echarts系列:echarts中的legend名称最上面被遮挡一部分

在 ECharts 中,遇到 legend 的名称在图表中被遮挡。 被遮挡的原因,通常是因为布局问题,可能涉及到 legend 的位置、尺寸或者是与其他组件的重叠。 通过排查问题,发现以下一些解决 legend 名称被遮挡的方案: 调整 Legend 的位置: 你可以通过改变 legend 的 top, bottom, …

深入解读Prometheus Adapter:云原生监控的核心组件

一、引言 Prometheus Adapter的背景与重要性 在现代的云原生架构中&#xff0c;微服务和容器化技术得到了广泛的应用。这些技术带来了系统灵活性和扩展性的提升&#xff0c;但同时也增加了系统监控和管理的复杂度。Prometheus作为一款开源的监控系统&#xff0c;因其强大的指标…

JAVA面试八股文----Mybatis

1、Mybatis 1.1#{}和${}的区别是什么? Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; Mybatis在处理 0 时,就是把 0时,就是把 0时,就是把{}替换成变量的值。 有了#{}为什么还需要${}? #{}会被预编译处理,可以有效的防止SQL注…