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

金坛网站开发筹建网站信息技术

金坛网站开发,筹建网站信息技术,网站seo百度百科,网页动态效果本节做为Objective-C的入门课程#xff0c;笔者会从零基础开始介绍这种程序设计语言的各个方面。 术语 ObjeC#xff1a;Objective-C的简称#xff0c;因为完整的名称过长#xff0c;后续会经缩写来代替#xff1b;项目/工程#xff1a;也称工程#xff0c;指的是一个A… 本节做为Objective-C的入门课程笔者会从零基础开始介绍这种程序设计语言的各个方面。 术语 ObjeCObjective-C的简称因为完整的名称过长后续会经缩写来代替项目/工程也称工程指的是一个App的源文件的文件夹包和结构有时也称为工程或项目工程。项目模板不只ObjC用不同编程语言开发App时其源码都会包含源文件、集成框架、配置文件、资源图片等这些元素需要放在同一个文件中并要符合某种规则而针对不同类型的App其元素和组织又不一样这个工作比较费时所以为了效率考虑一般会经一个母版进行修改这个母版就称为项目模板 Command Line Tool工程 首先我们需要创建一个Command line tool工程项目即不带图形化界面的项目。 在上述工程创建界面上有很多模板项目可以按需要选择相应的模板开发这样省去了好多搭建框架的时间但也可以选择从空项目开始。多数模板可以从字面意思就可以了解。 现在我们只需要知道Command Line Tool工程模板就足够了一种无UI界面的可在命令行执行的脚本工程模板后续在涉及AppKit之前的所有代码我们全会以这类工程为载体演示代码其它的工程模板在讲到其内容时再详细解释。 创建HelloWorld工程 按照惯例我们还是以一个Hello Word项目做为开始了解一下ObjCObjectiveC简称项目结构和基础语法。项目名称暂时称为helloWorld项目设置采用默认即可不需要做任何改变项目结构如下 打开main.m文件我们所有的测试代码暂时全写在这里面.m是ObjC代码文件的后缀.c是C语言的源码文件运行时会交由程序编译器LLVM处理和运行。 // // main.m // helloWorld // // Created by 刘东 on 2023/12/20. //#import Foundation/Foundation.hint main(int argc, const char * argv[]) {autoreleasepool { // 自动释放池由系统来管理变量的内存// insert code here...NSLog(Hello, World!); // 打包日志函数用修饰表示NSString对象}return 0; // 规定 0 表示程序正常结束其它值都是非正常结束 }除了上述.m文件外还可以兼容几下以类源码文件 .cC文件.cc, .cppC文件.h头文件.mmObjective-C文件可以同时使用ObjectiveC和C语法.plPerl文件.oObjectiveC编译后的文件.mObjective-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 2025; NSLog(The sum is %i, sum); //NSLog函数如果发现%则视为占位符这样的占位符有很多后续会讲到也可以用printf()函数来代码但不是太建议因为NSLog添加了很多格式化的信息注意看下面代码的输出 NSLog(Hello, World!\n);printf(Hello, World!\n);~~~~2024-03-26 19:31:52.0912650800 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.1038780800 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 表示methodf 表示函数c 表示类 代码导航 可以通过在源码中设置特殊的标识来把需要关心的代码加入到代码面包屑工具栏中这些标识在编译时会被编译器忽略掉。 这些特殊标记通常用 -减号实现一个分隔线见上图whatever任意字符//开头的特殊标记以关键字冒号空格文字描述格式比如//TODO: 未完成的工作这些关键字一般有TODO:、FIXME:、!!!:、???: 快捷键 鼠标左键option然后点击某个类型在弹出窗口点击相应的类型名可直接跳转到document controli格式化代码 commandd删除行需要在keymap中搜索delete line自行设置 command左/右箭头快速移到行首和行尾 commandshifto快速查找 commandoption左/右箭头展开和折叠代码功能们于Edit-Code Folding下面 commandoptionshift左/右箭头展开和折叠所有方法 commandr运行程序 commandu测试程序 另外可供编辑使用的快捷键盘就是电脑上的触摸屏可通过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中它可以检查代码中的 安全问题并发问题逻辑问题冗余代码 疑似有问题的代码可以在导航面板中查看找到问题后可在面板中点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.44e11;字符串常量 字符不是一个基本类型它是一个对象在使用时除了用对象实例化后简单的可以直接用“”来表示 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 类型运算符 四则运算 、 -、 *、 \、 %、、–-(负号)类型强转这里和java一样 比如这样的写法 int a (int)ff为一float类型赋值运算、!、、-、/、*三元运算符condition ? expression1: expression2位运算、 |、 ^、 ~(求反)、 、关系运算、!、 、 、 、 运算规则 主要是数值上面 同类型的的数相互运算结果是同类型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’%cshort int123%hi, %hx, hounsigned short int123%hu, %hx, %ho%hxint12, -97, 0177(8进制0xFEE0(16进制%i, %x, %ounsigned int12u, 100U, 0xFFU%x, %0, %ulong int12L, -2001, 0xFFFFL%li, %lx, %lounsigned long int12UL, 100ul, 0xFFFFUL%lu, %lx, %lolong long int500ll, 0xe5e5e5LL%llu, %llx, %llofloat12.32f, 3.1e-5f%f, %e, %,g, %adouble12.32, 3.1e-5%f, %e, %g, %along double12.34L, 3.1e-5l%Lf, %Le, %Lgidnil%p**p指针% %是一个通用字符可表示任何数据可归类为打印对象它会调用类的description:方法%s打印字符串
http://www.hkea.cn/news/14324161/

相关文章:

  • 网站如何备案工信局南宁企业网站设计公司
  • 怎么在互联网上建立网站网易企业邮箱彻底删除的邮件还能恢复吗
  • 公司和公司网站的关系定制网站建设流程
  • 金坛区建设工程质量监督网站东莞头条最新新闻
  • 补习吧 一家专门做家教的网站网站开发佛山
  • 做行政关注什么类型的网站互联网推广策划
  • 学校网站的功能秦皇岛优化营商环境
  • 花钱做网站注意莆田网站制作价格
  • 视频网站做app还是h5企业网络推广情况介绍
  • 哈尔滨模板网站建设新网站应该怎么做
  • 个人做百度云下载网站网站用什么系统好
  • 多网站绑定域名网络组建实训总结
  • 青岛seo做的好的网站qq头像网站源码
  • 织梦做单页面网站管理咨询网站
  • 建国际网站需要多少钱怎么做网页才能置顶
  • 企业网站建设管理视频做视频网站教程
  • 58网站为啥做不好做网站百度百科
  • 重庆建设工程安全管理局网站网速测速
  • 网站建设专业平台旅游网站开发文档
  • 做网站后要回源码有何用广州微网站制作
  • 湖北 商城网站建设网站开发禁止下载功能
  • 网站建设如何给网址设置链接公司网站推广如何做
  • 注册网站法律风险有服务器如何做网站
  • 杭州规划建设网站个人网站介绍
  • 中国建设银行网站结构什么是网站建设公司
  • 简洁公司网站源码layui+wordpress
  • 医院门户网站模板青岛网络推广建站
  • 宁波市市建设法规颁发网站小程序制作平台排名
  • 国外免费网站空间公司公共邮箱怎么申请
  • 杭州专业网站建设绍兴网站网站建设