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语言来完毕的。


语言是工具,但相同蕴涵着一种哲理,或是一种思想的表达。

什么语法或遗忘的细节可以再查看。我理解的想法,你说的语言理解能力。

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

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

相关文章

Solidworks如何自动打开和关闭特征识别FeatureWorks

如果直接对已有的零件识别特征,可能会报错 删除多余的特征,先只保留一个输入(注意没有必要连草图也删掉,草图不会影响识别特征,你识别完了之后草图再接着该拉伸拉伸,该切除切除),然后…

SPI驱动0.96/1.3寸 OLED屏幕,易修改为DMA控制

目录OLED SPI 端口定义七针OLED引脚定义六针OLED引脚定义驱动程序oled.coled.holedfont.h使用main.c实验现象STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 DMA控制见【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、…

分享网页到微信朋友圈的官方接口

看到 JiaThis 增加了微信分享的按钮,查看了下网络请求,是官方提供的接口,不过官方文档还没有这方面的信息。这个接口应该是合作测试中的,不排除以后会更改或者停用。 目前分享到微信朋友圈不同于通常的分享,需要先向微…

WordPress PHP Fatal Error “Maximum execution time of 30 seconds exceeded” 的解决办法

修改Wp-config.php 在wp-config.php中增加一行,注意在/* That’s all, stop editing! Happy blogging. */”这一行之前加入: set_time_limit(60); https://blog.csdn.net/cnpinpai/article/details/84575015

上传图片在页面上显示

看了别人写的 自己照着写了一下 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()"…

Codeforces Round #307 (Div. 2) A. GukiZ and Contest 水题

A. GukiZ and Contest Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/problem/A Description Professor GukiZ likes programming contests. He especially likes to rate his students on the contests he prepares. Now, he has deci…

提高你的Java代码质量吧:使用valueof前必须进行校验

一、分析 每个枚举都是java.lang.Enum的子类&#xff0c;都可以访问Enum类提供的方法&#xff0c;比如hashCode、name、valueOf等&#xff0c;其中valueOf方法会把一个String类型的名称转变成枚举项&#xff0c;也就是在枚举项中查找字面值和该参数相等的枚举项。 我们来深入…

【STC15库函数上手笔记】9、硬件SPI

目录硬件知识库函数spi.cspi.h测试main.c实验现象STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬件知识 摘自《STC15系列单片机器件手册》 STC15系列单片机还提供另一种高速串行通信接口——SPI接口。SPI是一种全双工…

中介者模式分析、结构图及基本代码

&#xfeff;&#xfeff;定义&#xff1a;用一个中介对象来封装一系列的对象交互。中介者使各对象不须要显式地相互引用。从而使其耦合松散&#xff0c;并且能够独立地改变它们之间的交互。适用地方&#xff1a;中介者模式一般应用于一组对象以定义良好可是复杂的方式进行通信…

WordPress 数据库结构及表字段作用解析

对于WordPress的开发可以说子凡已经是如痴如醉了&#xff0c;通过 WordPress 本身的开放性接口可以做到很多的事情&#xff0c;但是有些时候我们可能更喜欢直接查询数据库来实现某些 WordPress 没有提供的函数来实现目的&#xff0c;所以这时候我们就需要对WordPress 数据库的结…

硬件负载均衡设备介绍

最常用是F5 与citrix netscaler 负载均衡分全局负载均衡和本地负载均衡。 地负载均衡是指对本地的服务器群做负载均衡&#xff0c;全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。 循环DNS 就是每次解析域名时指向IP loop list 里的下一个…

【STC15库函数上手笔记】10、EEPROM

目录硬件知识基本介绍软件知识EEPROM多字节读函数EEPROM多字节写函数EEPROM扇区擦除函数函数测试main.c实验现象STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬件知识 基本介绍 摘自《STC15系列单片机器件手册》 STC…

Android中shape中的属性大全

<shape><!-- 实心 --><solid android:color"#ff9d77"/><!-- 渐变 --><gradientandroid:startColor"#ff8c00"android:endColor"#FFFFFF"android:angle"270" /><!-- 描边 --><strokeandroid:wid…

Mysql 插入中文错误:Incorrect string value: '...' for column 'xx' at row 1

datasource url后面加上useUnicodetrue&characterEncodingutf-8alter table w default character set utf8; alter table w change score score varchar(50) character utf8; 转载于:https://www.cnblogs.com/orziii/p/7372339.html

修改WordPress中上传附件2M大小限制的方法

https://blog.csdn.net/u010486124/article/details/38348327?utm_sourceblogxgwz7 post_max_size512M upload_max_filesize512M

ASP.NET会员注册登录模块(MD5加密,Parameters防止SQL注入,判断是否注册)

MD5加密,Parameters防止SQL注入:protected void btnLog_Click(object sender, EventArgs e){//获取验证码string code txtCode.Text;//判断用户输入的验证码是否正确if (Request.Cookies["CheckCode"].Value code){//创建数据库连接SqlConnection con new SqlConn…

【51单片机快速入门指南】4.6:I2C 与 PCF8563实时时钟日历芯片

目录硬知识概述特性功能描述报警功能模式定时器模式CLKOUT输出复位低电压检测器和时钟监视器低电压检测器和时钟监视器寄存器结构寄存器概述BCD编码格式寄存器概述Control/Status 1 寄存器&#xff08;内存地址00H&#xff09;Control/Status 2 寄存器&#xff08;内存地址01H&…

(转) Spring读书笔记-----Spring的Bean之配置依赖

前一篇博客介绍了Spring中的Bean的基本概念和作用域&#xff08;Spring读书笔记-----Spring的Bean之Bean的基本概念 &#xff09;,现在介绍Spring Bean的基本配置。 从开始我们知道Java应用中各组件的相互调用的实质可以归纳为依赖关系。根据注入方式的不同&#xff0c;Bean的依…

Luogu P1031 均分纸牌(贪心)

P1031 均分纸牌 题目描述 有 N 堆纸牌&#xff0c;编号分别为 1&#xff0c;2&#xff0c;…, N。每堆上有若干张&#xff0c;但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌&#xff0c;然后移动。 移牌规则为&#xff1a;在编号为 1 堆上取的纸牌&#xff0c;只能移到…

利用MySQL语句批量替换指定wordpress文章中的图片路径

天花了很多时间将SAE服务器中的图片下载到本地&#xff0c;然后删掉&#xff0c;但是有一个问题就是&#xff0c;所有文章中的图片路径还是以前的&#xff0c;没有根据域名来。导致下午某些时间段图片都是无法显示的&#xff0c;后来想到用MySQL直接批量替换&#xff0c;执行才…