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

ObjectiveC-03-XCode的使用和基础数据类型

本节做为Objective-C的入门课程,笔者会从零基础开始介绍这种程序设计语言的各个方面。

术语

  • ObjeC:Objective-C的简称,因为完整的名称过长,后续会经缩写来代替;
  • 项目/工程:也称工程,指的是一个App的源文件的文件夹包和结构,有时也称为工程或项目工程。
  • 项目模板:不只ObjC,用不同编程语言开发App时其源码都会包含源文件、集成框架、配置文件、资源图片等,这些元素需要放在同一个文件中并要符合某种规则,而针对不同类型的App其元素和组织又不一样,这个工作比较费时,所以为了效率考虑一般会经一个母版进行修改,这个母版就称为项目模板;

Command Line Tool工程

首先,我们需要创建一个Command line tool工程项目(即不带图形化界面的项目)。
在这里插入图片描述
在上述工程创建界面上有很多模板项目,可以按需要选择相应的模板开发,这样省去了好多搭建框架的时间,但也可以选择从空项目开始。多数模板可以从字面意思就可以了解。

  • 现在我们只需要知道Command Line Tool工程模板就足够了(一种无UI界面的可在命令行执行的脚本工程模板);
  • 后续在涉及AppKit之前的所有代码我们全会以这类工程为载体演示代码,其它的工程模板在讲到其内容时再详细解释。

创建HelloWorld工程

按照惯例,我们还是以一个Hello Word项目做为开始,了解一下ObjC(ObjectiveC简称)项目结构和基础语法。项目名称暂时称为helloWorld,项目设置采用默认即可,不需要做任何改变,项目结构如下:

在这里插入图片描述

打开main.m文件,我们所有的测试代码暂时全写在这里面,.m是ObjC代码文件的后缀(.c是C语言的源码文件),运行时会交由程序编译器LLVM处理和运行。

//
//  main.m
//  helloWorld
//
//  Created by 刘东 on 2023/12/20.
//#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {@autoreleasepool { // 自动释放池,由系统来管理变量的内存// insert code here...NSLog(@"Hello, World!"); // 打包日志函数,用@修饰表示NSString对象}return 0;  // 规定 0 表示程序正常结束,其它值都是非正常结束
}

除了上述.m文件外还可以兼容几下以类源码文件:

  1. .c:C文件
  2. .cc, .cpp:C++文件
  3. .h:头文件
  4. .mm:Objective-C++文件,可以同时使用ObjectiveC和C++语法;
  5. .pl:Perl文件
  6. .o:ObjectiveC编译后的文件
  7. .m:Objective-c文件

代码注释

在ObjC中只有两种注释:

  • //:行注释,一般用于代码行或代码后面;
  • /* */:块注释,一般用于类说明,方法说明或代码块说明使用;
  • #pragma mark *** String funnel methods ***,这是一种特殊格式的指令,也能起到注释的作用,详细可参考代码导航一节;
// Secondary text that may be displayed/*Secondary text that may be displayed adjacent to or below the primary title depending on the configuration of the window.A value of empty string will remove the subtitle from the window layout.
*/

模块导入

格式为:#import <Foundation/Foundation.h> 注意最后面没有;分号,表示为当前类的实现添加相关的模块依赖。如果导入的是自定义的实现,则需要用双引号(本地)替换<>(系统)。

#import <Foundation/Foundation.h>
#import "Fraction.h" 

上述所谓的系统其实称为框架更合适,比如Foundation、AppKit框架,每个框架都有一个主头文件,它包含了框架内所有的头文件,只需导入一次就可以使用此框架内所有的功能,这样就省去了一个个导入的麻烦。

MAC OS所有框架的目录位于 /System/Library/Frameworks 目录下。

入口函数main

程序运行的主入口函数,格式为:int main(int argc, const char * argv[]),程序的执行入口和java的main函数功能相同,每个App最多只能允许存在一个main函数。一般练习时用main函数调用就行,如果是大型项目ObjC也提供了专门的单元测试框架,后续会讲到,main.m语法格式如下:

static void method(){
}/*
argc:命令行输入的参数个数
argcv:字符指针数组,即参数值
*/
int main(int argc, const char * argv[]) {@autoreleasepool {//代码位置}return 0;
}

运行传参

函数说明:int main(int argc, const char * argv[])

  • argc:命令行输入的参数个数
  • argcv:字符指针数组,即参数值,argcv[0]指向一个函数,argcv[1]为一个字符数组
int main(int argc, const char * argv[]) {@autoreleasepool {struct entry dict[100] = {{"abyss", "a bottomless pit"},{"addle", "to become confused"}};int entries = 10;int entryNumber;int lookup(struct entry dict[], char search[], int entries);if (argc!=2){NSLog(@"no word typed on the command line.");return 1;}entryNumber = lookup(dict, argv[1], entries);if(entryNumber!=-1){NSLog(@"%s", dict[entryNumber].definition);}}return 0;
}

调用方法如下,可从命令行,也可从Xcode中执行

clang -fobjc -arc main.m lookup abyss - 

上述程序会调用函数lookup,然后在dict字典中查找argv[1]中的单词,如果找到就返回详细的解释。

添加函数

在main函数所在的类中也可以添加自定义的方法,但方法的命名方式和ObjC的语法有很大不同,这一点需要额外注意。在main中定义的方法是C语言的语法。

#import <Foundation/Foundation.h>//无参方法,在方法前面也可以添加static关键字
void nsRangeTest(){NSRange range1 = {17, 4};
}//有参方法
NSComparisonResult *compareArray(id element, id compareEle){return [[compareEle name] compare: [element name]];
}int main(int argc, const char * argv[]) {@autoreleasepool {nsRangeTest();}return 0;
}

打印函数NSLog

打印函数,相当于C语言或JAVA语言的print()函数,这里需要注意写法,一定是以@开头,这也说明了NSLog函数的入参是一个NSString类型的对象(在ObjC语言中,字符串用@""表示),另外所有的Cocoa函数和对象全部以NS做为命名前缀(也被称命名空间),也有一些老的API是采用CF开头的但不建议使用了。

NSLog(@"Hello, World!");
int sum = 20+25;
NSLog(@"The sum is %i", sum); //NSLog函数如果发现%,则视为占位符,这样的占位符有很多,后续会讲到

也可以用printf()函数来代码,但不是太建议,因为NSLog添加了很多格式化的信息,注意看下面代码的输出

        NSLog(@"Hello, World!\n");printf("Hello, World!\n");~~~~2024-03-26 19:31:52.091265+0800 helloWorld[46546:5251675] Hello, World!Hello, World!

键盘输入

scanf()函数也可以使用占位符,因为键盘接收的原始数据全是字符串,在程序中需要做一些类型转换工作。下在程序运行后在scanf处会卡住,然后在控制台输入相应字符后就会往下执行了。

int main(int argc, const char * argv[]) {@autoreleasepool {int age;scanf("%i", &age); //注意&的用法,它表示一个指针引用,NSLog(@"age is %i", age);}return 0;
}/*~~
aaa
2024-03-27 14:39:56.103878+0800 objcBase[59017:6048518] age is 32759
Program ended with exit code: 0
*/

程序运行

除了使用Xcode工具运行,还可以使用命令行工具执行。其命令如下,其中prog1为重命名的项目名称。但这种方式并友好,因为还在设置PATH等资源目录。

(base) MacBook:~ liudong$ clang -fobjc-arc main.m -o prog1(base) MacBook:~ liudong$ clang -fobjc-arc -framework Foundation main.m -o prog1

输入类似下面的界面:
在这里插入图片描述
用NSLog输出时,上面的4596表示当前应用的进程ID号。另外编译好的文件一般会存放在以下目录中,其中helloWorld-ghwqfuwptpnvhtfpzqoxxzcbnzow是一串随机值。不同版本的OS操作系统存放的位置有可能不太一样。

~/Library/Developer/Xcode/DerivedData/helloWorld-ghwqfuwptpnvhtfpzqoxxzcbnzow/Build/Products/Debug

进入这个目录下可以执行./helloWorld就可以直接运行应用了。
在这里插入图片描述

程序中止

有两种方式一种是在main函数中中止,一种是在方法中强制中止,在main函数中直接使用retrun 0即可,则在方法中需要使用以下代码。

exit(0);

设置XCode

首先来讲,苹果公司通常喜欢在不同版本的XCode中增加或移动一些功能,而且这些功能对开发代码的效率是非常高的。下面就以XCode V13版本为例来说明下这些设置如何操作。

主界面

在这里插入图片描述

  • 导航器:用来显示项目的源码,最上面的有9个左右的工具栏,包括:符号、搜索、总是、调试、断点和日志等,快捷键盘是command+数字1~9;
  • 工具栏:这里最主要的是库面板,需要从菜单View-Show Toolbar打开;
  • 检查器:不同的文件会有不同的设置,也就是属性设置面板;
  • 代码编辑区:在最上面有一个面包屑栏和工具栏,工具栏上有导航文件功能,面包屑栏显示了当前文件一些内容。这块的功能比较简单,点一次就可以记住了;

环境下载

在Preferences偏好设置中可以下载不同的运行环境:
在这里插入图片描述

代码自动完成

XCode有代码提示功能,输入一个字符会有默认提示,通过ESC键来打开或关闭提示框,然后通过Control+/-可实现快速翻页。
在这里插入图片描述

  • # :代表define指令;
  • m :表示method;
  • f :表示函数;
  • c :表示类

代码导航

可以通过在源码中设置特殊的标识来把需要关心的代码加入到代码面包屑工具栏中,这些标识在编译时会被编译器忽略掉。
在这里插入图片描述
这些特殊标记通常用:

  1. -,减号实现一个分隔线,见上图
  2. whatever,任意字符;
  3. //开头的特殊标记,以关键字+冒号+空格+文字描述格式,比如//TODO: 未完成的工作,这些关键字一般有TODO:、FIXME:、!!!:、???:

快捷键

  1. 鼠标左键+option,然后点击某个类型,在弹出窗口点击相应的类型名可直接跳转到document;

  2. control+i,格式化代码;

  3. command+d,删除行(需要在keymap中搜索delete line自行设置);

  4. command+左/右箭头,快速移到行首和行尾

  5. command+shift+o,快速查找;

  6. command+option+左/右箭头:展开和折叠代码,功能们于Edit-Code Folding下面

  7. command+option+shift+左/右箭头:展开和折叠所有方法

  8. command+r,运行程序

  9. command+u,测试程序

另外可供编辑使用的快捷键盘就是电脑上的触摸屏,可通过Edit-Customizer Touch bar 来设置,如下:
在这里插入图片描述

程序调试

主要使用以下几个工具,依次是:跳到下一个断点、下一行、进入被调用的方法、跳出被调用的方法。分别对应快捷键F5~F8。

在这里插入图片描述

另一个调试窗口在导航区上,与调试区联动,主要是下图中这两个标签页,一个是性能查看,另一个是断点浏览
在这里插入图片描述
鼠标悬浮到某个程序变量上也会显示相应的信息
在这里插入图片描述
还有一些更高级的功能可以在控制台输入相应的指令,比如:

  • call [exp]:调用给定对象的方法;
  • print [exp]:打印表达式的原始值,比如print [int] [obj length];
  • print-object [exp]:打印表达式的对象值;
  • set [v] = [exp]:给表达式赋值;
  • whatis [exp]:判断变量的类型;
  • help:帮助;
    在这里插入图片描述

静态检查器

这个功能是不是一个新的功能,很多IDE都有此种能力,有些还会以插件的形式存在,比如sonna, understand或是idea中的各种分析插件。

静态检查器的功能就是不运行代码来分析代码中可能存在的一些问题,在xcode中其功能集中在菜单"project-Analyze"中,它可以检查代码中的:

  1. 安全问题;
  2. 并发问题;
  3. 逻辑问题;
  4. 冗余代码;
    在这里插入图片描述
    疑似有问题的代码可以在导航面板中查看,找到问题后可在面板中点Fix来修复这些警告信息。
    在这里插入图片描述
    有时也会误报,因为检查器毕竟也是一段逻辑固定的程序,没办法覆盖所有的代码模式,如果发现了语报除了用上面 Fix 来关闭外,也可以在方法后加一个特殊标识来告诉检查器这块的这个问题不要检查了,比如:
//类似这样的标签还有很多,可以按需选择
static void dataFun (void) NS_RETURNS_RETAINED {  }

基础数据类型

基础数据类型

布尔类型

关键字BOOL,其值默认只有YES或NO,在Objc中只可与1和0相互转换,占8位存储空间,在写程序时也可以用#define把TRUE和FALSE定义为1 和 0,示例如下:

BOOL areIn(int thing, int ti){if (thing == ti){return (YES);}return NO;//return thing = ti; 这行代码有问题,因为ObjC中只有0和1来平替YES和NO
}
NSString *bool2Str(BOOL y){if (y == YES){return @"yes";}else{return @"no";}
}
int main(int argc, const char * argv[]) {@autoreleasepool {BOOL *boolV = areIn(1, 2); NSLog(@"%d = %@", boolV, bool2Str(boolV)); //0 = noNSLog(@"%d = %@", 1, bool2Str(1)); //1 = yesNSLog(@"%d = %@", YES, bool2Str(YES)); //1 = yes}return 0;
}

char字符类型

单个字符,用’'单引号表示

char c = 'a';

int整数类型

int i = 1000;

float浮点类型

带小数点的变量,比如

float f = 123.95;

double双精度浮点数

双精度

double d = 8.44e+11;

字符串常量

字符不是一个基本类型,它是一个对象,在使用时除了用对象实例化后,简单的可以直接用@“”,来表示:

NSString *str = @"korgs";
创建一个可变字符串
NSMutableString *stringM1 = [[NSMutableString alloc] initWithString:@"字符串"];

可用cString打印字符串内容,它返回的是一个char *指针地址。

         NSString *string = @"abdc";NSLog(@"%@, %s", string, [string cString]);//abc, abcNSLog(@"lenght = %i", [string length]);//4

类型限定词

ObjC中的数据类型定义非常有意思,支持组合定义,这些限定词主要包括:long, long long, short, unsigned和signed这几个,它的作用是扩充原有数字的表述范围,具体的范围会根据系统决定,比如

long int factorial; //声明为long的整形变量

long, long long, short, unsigned和signed

类型运算符

  1. 四则运算: +、 -、 *、 \、 %、++、–
  2. -(负号)
  3. 类型强转,这里和java一样, 比如这样的写法 int a = (int)f,f为一float类型
  4. 赋值运算:=、!=、+=、-=、/=、*=
  5. 三元运算符:condition ? expression1: expression2
  6. 位运算:&、 |、 ^、 ~(求反)、 << 、>>
  7. 关系运算:==、!=、< 、 > 、 <= 、 >=

运算规则

主要是数值上面:

  • 同类型的的数相互运算,结果是同类型;
  • bool, char, short, int, bit field, enum全部转为int再运算;
  • 大类型与小类型运算结果为大类型,比如long int / short int = long int;

数据打印

以上类型如果需要用NSLog等函数打印时,其占位符表示都不太一样,大体如下。当用%@时表示可以打印任何内容。看似很复杂,其实就四个特殊的,float, long, unisigned, long long,分别用f, l(L), u(U), ll(LL)来表示,其它的不是太常用

类型实例示例NSLog字符
char‘a’ ‘\n’%c
short int123%hi, %hx, ho
unsigned short int123%hu, %hx, %ho,%hx
int12, -97, 0177(8进制)0xFEE0(16进制)%i, %x, %o
unsigned int12u, 100U, 0xFFU%x, %0, %u
long int12L, -2001, 0xFFFFL%li, %lx, %lo
unsigned long int12UL, 100ul, 0xFFFFUL%lu, %lx, %lo
long long int500ll, 0xe5e5e5LL%llu, %llx, %llo
float12.32f, 3.1e-5f%f, %e, %,g, %a
double12.32, 3.1e-5%f, %e, %g, %a
long double12.34L, 3.1e-5l%Lf, %Le, %Lg
idnil%p
**p(指针)%@
  1. %@:是一个通用字符可表示任何数据,可归类为打印对象,它会调用类的description:方法;
  2. %s:打印字符串

相关文章:

ObjectiveC-03-XCode的使用和基础数据类型

本节做为Objective-C的入门课程&#xff0c;笔者会从零基础开始介绍这种程序设计语言的各个方面。 术语 ObjeC&#xff1a;Objective-C的简称&#xff0c;因为完整的名称过长&#xff0c;后续会经缩写来代替&#xff1b;项目/工程&#xff1a;也称工程&#xff0c;指的是一个A…...

YOLOv9改进策略 :主干优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

💡💡💡本文改进内容: token mixer被验证能够大幅度提升性能,但典型的token mixer为自注意力机制,推理耗时长,计算代价大,而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构 ,在保证性能的同时足够轻量化。 💡💡💡RIFormerBlock引入到YOLOv9,多个数…...

원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)

클릭 한 번으로 전자상거래 플랫폼 데이터를 캡처하는 것은 일반적으로 웹 페이지에서 정보를 자동으로 추출 할 수있는 네트워크 파충류 기술과 관련됩니다.그러나 모든 형태의 데이터 수집은 해당 웹 사이트의 사용 약관 및 개인 정보 보호 정책 및 현지 법률 및 규정을 준수…...

2024年github开源top100中文

2024年github开源top100中文 动动美丽的小指头点个赞呗&#xff0c;感谢啦&#xff01;&#x1f495;&#x1f495;&#x1f495;&#x1f618;&#x1f618;&#x1f618; 本文由Butterfly一键发布工具发布 语言star项目名称描述Python45670xai-org/grok-1Grok开源发布Ruby260…...

回收站删除的文件在哪里?专业恢复方法分享(最新版)

“我很想知道我从回收站删除的文件被保存在哪里了呢&#xff1f;我刚刚不小心清空了回收站&#xff0c;现在想将它们恢复&#xff0c;应该怎么操作呢&#xff1f;谁能教教我怎么从回收站恢复文件&#xff1f;” 回收站&#xff0c;作为Windows操作系统中的一个重要组件&#xf…...

什么是工时管理软件?

简而言之&#xff0c;工时管理软件是一种可以帮助管理者跟踪企业员工在项目和任务上花费的时间的软件。然而&#xff0c;工时管理软件不仅是一种收集信息的工具&#xff0c;它还是一种解决方案&#xff0c;使企业能够处理和优化不同的流程和活动&#xff0c;例如工资单、项目预…...

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来&#xff0c;有关智慧城市的讨论主要围绕在技术进步方面&#xff0c;如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上&#xff0c;智慧城市是一个关于未来的设想&#xff0c;其重要原因在于城市中存在各种基础设施、政治、地理、财…...

SQLBolt,一个练习SQL的宝藏网站

知乎上有人问学SQL有什么好的网站&#xff0c;这可太多了。 我之前学习SQL买了本SQL学习指南&#xff0c;把语法从头到尾看了个遍&#xff0c;但仅仅是心里有数的程度&#xff0c;后来进公司大量的写代码跑数&#xff0c;才算真真摸透了SQL&#xff0c;知道怎么调优才能最大化…...

TikTok防关联引流系统:全球多账号运营的终极解决方案

tiktok防关联引流系统介绍&#xff0c;tiktok防关联系统是基于tiktok生态研发的效率工具&#xff0c;帮你快速实现tiktok全球多账号运营&#xff0c;系统配备了性能强劲的安卓&#xff0c;防关联智能终端&#xff0c;可一建创建全球多国手机环境&#xff0c;完美满足各类app软件…...

卷积神经网络(CNN)的数学原理解析

文章目录 前言 1、介绍 2、数字图像的数据结构 3、卷积 4、Valid 和 Same 卷积 5、步幅卷积 6、过渡到三维 7、卷积层 8、连接剪枝和参数共享 9、卷积反向传播 10、池化层 11、池化层反向传播 前言 本篇主要分享卷积神经网络&#xff08;CNN&#xff09;的数学原理解析&#xf…...

2024年华为OD机试真题-亲子游戏-Java-OD统一考试(C卷)

题目描述: 宝宝和妈妈参加亲子游戏,在一个二维矩阵(N*N)的格子地图上,宝宝和妈妈抽签决定各自的位置,地图上每个格子有不同的糖果数量,部分格子有障碍物。 游戏规则是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的所有糖果都可以拿走,不能走障…...

大模型显存占用分析

kvcache显存占用分析 假设序列输入长度&#xff1a;s&#xff0c;输出长度&#xff1a;n&#xff0c;数据类型以FP16来保存KV cache。 峰值显存占用&#xff1a;b(sn)hl2*24blh(sn) 注&#xff1a;b表示batch size&#xff0c;第一个2表示k/v cache&#xff0c;第二个2表示FP1…...

matlab中旋转矩阵函数

文章目录 matlab里的旋转矩阵、四元数、欧拉角四元数根据两向量计算向量之间的旋转矩阵和四元数欧拉角转旋转矩阵旋转矩阵转欧拉角旋转矩阵转四元数参考链接 matlab里的旋转矩阵、四元数、欧拉角 旋转矩阵dcmR四元数quatq[q0,q1,q2,q3]欧拉角angle[row,pitch,yaw] % 旋转矩阵…...

探讨Spring Boot的自动配置原理

Spring Boot以其简化Spring应用开发和部署的能力而广受欢迎。其中最引人注目的特性之一就是自动配置&#xff0c;它极大地减少了开发者需要手动编写的配置量。在本篇博客中&#xff0c;我们将深入探讨Spring Boot自动配置的工作原理&#xff0c;以及它是如何使得Spring应用的配…...

【LeetCode】热题100 刷题笔记

文章目录 T1 两数之和T49 字母异位词分组常用小技巧 T1 两数之和 链接&#xff1a;1. 两数之和 题目&#xff1a; 【刷题感悟】这道题用两层for循环也能做出来&#xff0c;但我们还是要挑战一下时间复杂度小于 O ( n 2 ) O(n^2) O(n2)的解法&#xff0c;不能因为它是第一道 …...

基于springboot+vue+Mysql的火车订票管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

C#学习笔记 面试提要

冒泡 for (int m 0; m < arr.Length; m) { for (int n 0; n < arr.Length - 1 - m; n) { if (arr[n] > arr[n1]) { int temp arr[n]; arr[n] arr[n 1]; arr[n1] temp; } } } 选择 for (int m 0; m < arr.Length; m) { int index 0; for (int n 1; n < …...

Linux用户识别与身份验证命令一览

这些命令在系统管理、用户管理和监控工作中扮演着重要的角色。下面&#xff0c;介绍它们的类型及功能描述&#xff1a; 一、系统信息命令 hostname&#xff1a;此命令用于显示系统的主机名&#xff0c;它代表了系统在网络中的唯一标识。hostname -f&#xff1a;此命令进一步展…...

【Linux】GCC编译器(七)

文章目录 初步了解安装 GCC编译第一个程序编译选项 初步了解 GCC是GNU Compiler Collection的缩写&#xff0c;是一个由GNU项目开发的编译器集合。 GCC的历史和发展&#xff1a;GCC最初由理查德斯托曼&#xff08;Richard Stallman&#xff09;发起&#xff0c;目的是创建一个…...

【目录整理】(五)

​​​​​Git 基础 Git 详细安装教程文章浏览阅读10w次&#xff0c;点赞9.6k次&#xff0c;收藏1.7w次。Git 是个免费的开源分布式版本控制系统&#xff0c;下载地址为git-scm.com 或者 gitforwindows.org&#xff0c;本文介绍 Git-2.40.0-64-bit.exe 版本的安装方法&#x…...

项目:USB键盘和鼠标的复合设备

我们的复合设备使用一个物理设备就可以完成多个功能。 使用复合设备同时完成USB键盘和鼠标功能&#xff0c;它的主要实现方式有两种&#xff0c; 第一个就是我们将多个设备描述符合并成一个&#xff0c;这个相对比较简单&#xff0c;我们只要根据相应的报告描述符处理数据就可…...

Linux利用Jenkins部署SpringBoot项目保姆级教程

在当今快速发展的软件开发领域&#xff0c;持续集成和持续部署&#xff08;CI/CD&#xff09;已经成为提升开发效率、缩短产品上市时间的关键实践。Linux系统以其稳定性和开源友好性&#xff0c;成为众多开发者和企业的首选平台。而Spring Boot&#xff0c;作为一个轻量级的Jav…...

elementUI 输入框按回车刷新页面问题

分析原因&#xff1a; 当 el-form 表单内只有一个 el-input 输入框时&#xff0c;且type为text类型时&#xff0c;在输入框内按回车就会触发表单的提交事件。 而当 el-form 表单内有多个 el-input 输入框时&#xff0c;按回车不会执行任何操作。 使用.prevent修饰符来阻止默…...

C++的字节对齐

什么是字节对齐 参考什么是字节对齐&#xff0c;为什么要对齐? 现代计算机中&#xff0c;内存空间按照字节划分&#xff0c;理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问&#xff0c;这就需要各种类型数据按照一定的规…...

ALPHA开发板上的PHY芯片驱动:LAN8720驱动

一. 简介 前面文章了解到&#xff0c;Linux内核是有提供 PHY通用驱动的。 本文来简单了解一下ALPHA开发板上的 PHY网络芯片LAN8720的驱动。是 LAN8720芯片的公司提供的 PHY驱动。 二. ALPHA开发板上的PHY芯片驱动&#xff1a;LAN8720驱动 我 们 来 看 一 下 LAN8720A 的 …...

C语言游戏实战(9):球球大作战

前言&#xff1a; 这款简易版的球球大作战是一款单人游戏&#xff0c;玩家需要控制一个小球在地图上移动&#xff0c;吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写&#xff0c;旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前&#xf…...

【Windows】关闭自动更新

右键单击“此电脑”&#xff0c;点击“管理”。 找到&#xff1a;任务计划程序 -> 任务计划程序库 -> Microsoft -> Windows -> WindowsUpdate 右键单击Scheduled Start任务&#xff0c;然后点击“禁用”即可。 可能还会存在左下角提示更新重启的字样&#x…...

mac如何检测移动硬盘 mac硬盘检测工具 Tuxera怎么用 Tuxera NTFS官网

在工作学习中&#xff0c;我们都绕不开用移动硬盘来拷贝存储一些文件。但是在使用过程中&#xff0c;我们经常遇到“mac检测不到移动硬盘”“移动硬盘不存在”等问题&#xff0c;今天本文就带大家了解下mac如何检测移动硬盘&#xff0c;mac硬盘检测工具。 一、mac如何检测移动…...

1038 Recover the Smallest Number

idea 给出若干个可能含有前导0的数字串&#xff0c;将其进行拼接使其组成的数最小。 拼接串&#xff0c;想到借助string。 找最小&#xff0c;样例中的32,321, 3214尤为具备代表性&#xff0c;让字典序小的数尽可能靠前&#xff0c;联想到string的比较规则也是字典序 >判断…...

【Go】四、包名、访问范围控制、标识符、运算符

文章目录 1、_2、包名3、命名大小影响可访问范围4、运算符5、获取终端输入 1、_ 下划线"_"本身在Go中是一个特殊的标识符&#xff0c;称为空标识符用于忽略某个值 1&#xff09;忽略导入的没使用的包 2&#xff09;忽略某个返回值 2、包名 main包是程序的入口包&a…...

devexpress做网站/网络优化的三个方法

默认helpers.php文件加载的是系统的 src/Illuminate/Foundation/helpers.php src/Illuminate/Support/helpers.php如果自己想要新增helpers.php文件并实现自动加载 新建 app/helpers.php 内容为&#xff1a; <?php /*** 校验手机号合法性*/ if(!function_exists(checkP…...

灵雀云 wordpress/seo网页优化平台

Dubbo分布式服务子系统划分需要把控系统的数量 过多&#xff1a; 可能划分过细&#xff0c;破坏业务子系统的独立性 部署维护工作量大&#xff0c;独立进程占用内存多 过少&#xff1a; 没能很好的解耦 开发维护不好分工 升级维护影响面大 服务子系统划分注意事项&#…...

上海网站开发公司电话/软文写作实训总结

对于经常在windows下远程ssh到linux的用户而言&#xff0c;putty可能是你最好的选择。 可是缺省情况下&#xff0c;putty对中文的支持却让人不敢恭维&#xff0c;如果远程linux的locale设置为zh_CN.*(bg2312,gbk,utf8等等&#xff09;&#xff0c;显示就是乱码。经研究发现&…...

重庆制作网站公司哪家好/网站建设报价

【Android-View】点击侧滑菜单&#xff08;SlidingMenu&#xff09;按钮&#xff0c;更新主题内容时容易引发的内存问题解决方案参考文章&#xff1a; &#xff08;1&#xff09;【Android-View】点击侧滑菜单&#xff08;SlidingMenu&#xff09;按钮&#xff0c;更新主题内容…...

青岛网站建设推广/新疆今日头条新闻

南京整站网站优化哪个公司好热电咨询,SEO推广并不像看上去那么简单&#xff0c;这不仅包含了SEO的关键技术&#xff0c;也是优化思维中重要的部分。只有在思维上敢于突破&#xff0c;不断创新&#xff0c;还要掌握SEO优化技术&#xff0c;在推广策略上敢于做“吃螃蟹的人”&…...

公众号开发者权限/seo系统

linux shell java lib(linux shell脚本加载java环境变量)用shell来启动java应用程序&#xff0c;只要遍历lib目录#!/bin/shPROJECT_HOME/home/admin/projectMAINCLASScom._8qiu.app.MainClassCLASS_PATH${PROJECT_HOME}/classes:$(echo ${PROJECT_HOME}/lib/*.jar|sed s/ /:/g)…...