Objective-C马路成魔【14-关键C语言功能】
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。
假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主。捐赠数额任意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源代码下载:点我传送
这里介绍一些特性,在编写Objective-C程序时不一定须要了解。
其实,这些大部分来源于相关联的主要的C语言特性,
尽管C语言是一门过程式语言,当中的一些特性与面向对象编程的思想是对立的,
可是语言是思想也是工具,在当中找到二者关联和差异,会对Objective-C有更深入的理解。
数组:
定义一组有序的数据项,即数组。
假设在字符数组结尾加入一个终止空字符(‘\0’)。就产生了一个通常称为字符串的变量。
和其它变量类型一样。必须在使用之前先声明数组,
数组的声明涉及声明数组所包括元素的数值类型,以及将存储在数组中的最大元素数目。
函数:
假设使用了自己主动引用计数(ARC)。那么每次调用函数(方法)时,局部对象的变量都会默认初始化为空。
在函数中(和在方法中一样)定义的变量称为自己主动局部变量。
由于每次调用该函数后,它们都自己主动“创建”。而且它们的值对于函数来说是局部的。
函数和方法:函数是指非对象的过程调用。方法是指对象的过程调用。
函数默认的返回类型与方法默认的不同。
如果没有为方法指定返回类型。编译器就会如果它返回id类型的值。
相同,应该为方法声明返回类型。不要依赖这个事实。
函数的默认返回值是整型值。
调用函数或方法时,作为參数传递的值将被拷贝到对应的形參中。
使用数组时。并不是将整个数组的内容拷贝到形參数组中。
而是传递一个指针。它表示数组所在的计算机内存地址。
所以。对形參数组所作的全部更改实际上都是对原始数组而不是数组的副本运行的。
因此。函数或方法返回时,这些变化仍然有效。
块Blocks:
块对于c语言是一种扩展。
它并没有作为标准ANSI C所定义的部分。而是APPLE公司加入到语言中的。
块
看起来更像是函数。
一般来说,块是不能改变外部的变量的。除非使用_ _block int num = 0;这样修饰的变量。
块的当中一个优势在于可以让系统分配给其他处理器或应用的其他线程运行。
简言之:线程安全的。
不建议使用,不是标准的东西,当对程序进行移植时,就会显现出非常不方便。
指针:
C语言里的重要特性。面试必考,工作必用。
指针能够高效地表示复杂的数据结构,更改作为參数传递给函数和方法的值,
而且能更准确、高效的处理数组。
字符串常量:
“This is char.” 这个是C样式的字符串。
它们不是对象。
@“This is char.”这个是面向对象的字符串对象。
while循环用到了空字符等于数值0这一事实,熟练的Objective-C编程人员常常这样使用。
char *from;
char *to;
while (*from)
*to++ = *from++;
*to = '\0';
函数指针:
1)常见应用之中的一个是作为參数传递给其他函数。
2)常见应用之中的一个是建立分派表。即函数列表。
上面这些C语言特性,要记住一个基本原则:它们都不是对象。
这意味着不能给它们传递消息,也不能利用它们获得Foundation框架提供的内存分配策略之类的最大优势。
其它语言特性:
符合字面量:
(struct data) {.month = 7, .day = 2, .year = 2011}
goto语句:
懒惰的程序猿才会常常滥用goto语句,goto语句的运行导致在程序中产生一个到达特定点的直接分支。
假设你不懒惰,建议你还是不要常常使用该语句。
空语句:
不做不论什么操作。
逗号运算符:
优先级列表里最底层的运算符。
在Objective-C语言中,全部的运算符都产生一个值,
所以逗号运算符的值是最右边的表达式值。
sizeof运算符:
Objective-C语言提供了sizeof运算符。
它能够用来确定数据类型或对象的大小,返回的是指定项的字节大小。
工作原理:
关于Objective-C语言和C语言联系的4个事实。
1)实例变量存储在结构中。
定义一个类和它的实例变量时,这些实例变量实际上存储在一个结构中。
这说明了怎样处理对象,对象实际上是结构。结构中的成员是实例变量。
所以继承的实例变量加上你在类中加入的变量就组成了一个结构。
使用alloc分配新对象时,系统预留了足够的空间来存储这些结构。
结构中继承的成员(从根对象中获得的)之中的一个是名为isa的保护成员,它确定对象所属的类。
2)对象变量实际上是指针。
来创建新的实例时,是在为对象的新实例分配存储空间(即存放结构的空间)。然后使用结构的指针,并将指针变量存储在当中。
3)方法是函数,而消息表达式是函数调用。
方法实际上是函数。调用方法时,是在调用与接收者类相关的函数。
传递给函数的參数接收者(self)和方法的參数。
Objective-C编译器通过类名称和方法名称的组合为每一个函数产生一个唯一的名称。
4)id类型是通用指针类型。
返回id类型值的方法仅仅是返回指向内存中某对象的指针。
在C语言中就是 void *。
看了这4个事实后,你就会发现,事实上,这些事实仅仅是透露出Objective-C的面向对象底层是怎样实现的。
基本上全部的面向对象都是使用面向过程的一个扩展来实现的,C++也是这种。
也就是说。对象这个东西的底层实现都是由过程完毕的。
简而言之:
对象都是结构struct和指针的组合而已。
看到非常多面向对象的语言编译时都是转换为C语言的结构和指针。使用C语言编译。
说明面向对象的底层实现都是差点儿相同的。
所以,从技术实现上来讲,没有特别大的变革。
可是从概念或思想上来说。这是巨大的。
另外,那些像perl。python等等这些解释运行的语言,最后的实现也是C语言来完毕的。
语言是工具,但相同蕴涵着一种哲理,或是一种思想的表达。
什么语法或遗忘的细节可以再查看。我理解的想法,你说的语言理解能力。
Objective-C马路成魔【14-关键C语言功能】的更多相关文章
- Objective-C马路成魔【12-分类和协议】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 分类与协议 ...
- Objective-C之成魔之路【0-序章】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 C语言首创 ...
- 成魔笔记1——先入IT,再成魔
关于我为什么要写这个博客的原因,做一个简单的解释.因为报考的一时兴起,我选择了软件专业.可是三年下来,感觉自己没做多少事,也没收获到多少东西.很多时候都是老师讲什么,都是完全陌生的东西,跟不上教学的思 ...
- Objective-C之成魔之路【5-选择结构】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 Objec ...
- Objective-C之成魔之路【7-类、对象和方法】
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 Objec ...
- 2018年DDoS攻击全态势:战胜第一波攻击成“抗D” 关键
2018年,阿里云安全团队监测到云上DDoS攻击发生近百万次,日均攻击2000余次.目前阿里云承载着中国40%网站,为全球上百万客户提供基础安全防御.可以说,阿里云上的攻防态势是整个中国攻防态势的缩影 ...
- Objective-C之成魔之路【16-使用文件】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 语言的设计 ...
- Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 构造方法 ...
- Objective-C之成魔之路【13-预处理程序】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 预处理提供 ...
随机推荐
- newinstance()和new有什么区别?(转)
在初始化一个类,生成一个实例的时候:newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有 ...
- 使用Simple DNS plus 构建自己的DNS
1.下载并安装Simple DNS plus 2.界面例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2tfYm9zcw==/font/5a6L ...
- System.Threading.ThreadStateException
异常:"System.Threading.ThreadStateException"在未处理的异常类型 System.Windows.Forms.dll 发生 其它信息: 在能够调 ...
- UVA305 - Joseph(数论 + 打表)
UVA305 - Joseph(数论 + 打表) 题目链接 题目大意:约瑟夫环问题:n个人围成一圈,每次都淘汰第m个人,问最后一个幸存下来的人的编号. 这题的意思有点不一样,它规定前面的k个人是好人, ...
- 2013成都邀请赛J称号||HDU4725 The Shortest Path in Nya Graph(spfa+slf最短的优化)
职务地址:HDU 4725 这题卡了好长时间了,建图倒是会建,可是不会最短路的算法优化,本以为都须要堆去优化的,打算学了堆之后再来优化.可是昨晚CF的一道题..(那题也是不优化过不了..)然后我就知道 ...
- 基于OpenCV性别识别
叙述性说明 所谓的性别识别推断检测到的面部是男性还是女性.它是一个二值分类问题. 识别算法可以用于SVM,BP神经网络.LDA,PCA,PCA+LDA等等.OpenCV官网给出的文档是基于Fisher ...
- 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...
- android adb 不同的方式使用特定的解释
本文介绍windows 在程序中使用adb 方法.没有引进adb 该命令. 1) 启动adb 流程.获得输出从管道. 这样的方式的弊端有多少,我也不知道.反正就是各种问题吧.可是眼下我问过非常多朋友. ...
- IOS 数据库管理系统(SQLite)
嵌入式数据库 SQLite嵌入式数据库的优势 1.支持事件,你并不需要配置,无需安装,不需要管理员 2.支持部分脂肪SQL92 3.完整的数据库被存储在磁盘上的文件的顶部,相同的数据库文件可以在不同机 ...
- Windows下 C++ WT +VS2013配置
引出 最近在学习使用C++,另外对建站有点兴趣,所以就找到了WT.对于WT的详细介绍,这里不讲,直接看官网就好. 此文为本人原创,转载请注明出处. 先丢出官网上的干货: WT官方网站: https:/ ...