变量,数据类型,常量和预处理器

在本文中,您将学习Objective-C的基本构建模块。 如果您是编程的初学者并且是Objective-c的新手,那么此课程适合您。

我们使用任何语言为世界上的物体或地点命名。 这些名称代表我们的信息。 这就是我们记住事情的方式。 我们人类对人,地方,情感等所有事物都有自己的名字。 我们能想到的就是命名。 同样,在编程语言中,我们将信息存储在变量,常量,对象,属性,枚举,结构等中。 每个人都有独特的目的,让我们一一看待它们。

变数

顾名思义,变量是可以存储可以更改的信息的数据块。 例如,如果“名称”是变量,

NSString * name = @“苹果”;

//要么

NSString * name = @“ google”;

两者均有效,因为name是变量。 这意味着名称可以存储任何类型的信息,只要它是文本即可。 NSString表示变量的文本类型。 这些类型也称为数据类型。 对于不同类型的数据,可以使用不同的数据类型。 Objective-c是C的超集,因此它具有C的所有数据类型,并且很少添加自己的数据类型。

有整数,浮点数,双精度数,NSString,NSDate,NSArray,NSMutableArray,NSDictionary。 多数民众赞成在看起来很多,但不要打扰,如果您按照我们的教程进行学习,将会发现它简单而有趣。 现在,仅需了解变量可以存储可以更改的数据,只要它是任何特定的数据类型即可。

数据类型:-

我们每天都使用不同类型的数据来表示信息。 数字包含数字,单词包含字母。 类似地,在编程语言中,有不同的数据类型,例如整数,浮点数,字符串等,它们都有各自的特征,例如浮点数可以表示十进制数字,字符串包含可以更改和连接的一系列字符。 让我们看一下Apple为iOS和Mac-OS提供的数据类型。

数据类型是预定义的一组特性,适用于属于该类型的数据。

从C继承的数据类型

预处理宏 :-

我们了解了变量。 变量使我们能够存储和处理信息。 但是,如果我们想保持价值不变怎么办。 在每种编程语言中都有一个数据类型,它称为constant

在objective-c中,我们可以用两种方法定义一个常数:

  1. 使用预处理微型定义值
  2. 定义一个常数

预处理宏

预处理微定义为:

#define my_money 1000000000

我们在这里所做的是为一个值定义一个名称“ my_money”,其后跟一个空格。 现在,我们可以在需要的任何位置使用该名称作为值。 而且,如果我们想更改该值,则无需在我们的代码中费力地查找和更改它。 只需在上面的定义中进行更改,您的所有代码都将反映出更改。

幕后 :-

运行我们的代码时发生的是,将my_money替换为1000000000,并在编译器编译代码之前完成。 那就是为什么命名预处理宏。

我们也可以使用它来表示字符串值,例如:

#定义my_name @“ Ashish”

您一定已经注意到,在定义宏时我们不提供类型信息。 这是因为宏只是在编译之前替换了我们的代码。 它只是代表我们的数据,而不同于为数据分配物理内存的常量。

当然,使用宏很方便,但我们的编译器在编译期间无法进行适当的检查。 考虑以下示例:

#定义值2

#定义总值+ 3

因此,我们的总计代表“ 2 + 3”而不是5。

所以,如果我们做类似的事情:

int结果= TOTAL * 2;

NSLog(@“结果%d”,结果);

我们希望结果为10。

变成,int结果= 2 + 3 * 2;

这是输出:-

2015–05–23 17:11:15.939 DefineVsConstant [1086:65791]结果8

因此,您可以看到结果原来是8,而不是10。因此,在面向对象编程中,我们应该使用const而不是宏。

常数

常量是其变量 值始终保持固定,并且在程序执行期间无法更改。 它的定义如下:

const int aConstant = 11;

幕后花絮

在此,将内存分配给aConstant,并为其分配值11 。 在程序执行期间不能更改该值。 如果尝试这样做,编译器将抛出错误。

静态的

我们可以使用static和extern修改常量的范围。 如果我们不希望常量在您的类之外可用,则将其定义为静态。

我们可以使用static如下:

static const int aConstant = 11;

这样可以确保aConstant仅在定义它的文件中可用。

外部

但是,如果您希望它具有全局性,则可以像下面这样使用extern:-

在.h中:-

extern const NSString * baseURLString;

在.m:-

在@implementation行之后写:

NSString * baseURLString = @“ www.onestopios.com ”;

您不能使用方法中定义的extern。 您必须在正确的位置定义它。

创建一个单独的Constants.h和Constants.m文件以声明和定义您的常量。 这将使您的代码更易于维护和调试。

内存大小由于64位运行时环境而导致的数据类型更改

是否曾想过同一段代码如何在具有不同硬件和软件架构的不同平台上工作? 答案是,它们遵循标准约定,例如数据类型的大小和格式。 它们还遵循有关如何调用或链接代码的约定。 这些约定称为应用程序二进制接口。 iOS使用低级应用程序二进制接口。

“这些主题通常不包括在教程学习站点中,我打算提供它,因为我想提供有关每个主题的深入知识。 尽管一开始它看起来似乎很技术性并且不好玩,但是它会在面试中,与上级或同事进行辩论中,对您做某事的最佳方法是什么以及为什么这样做有帮助,因此可以在以后的每个步骤中为您提供帮助。 这可以在普通程序员和专业程序员之间有所作为。 所以继续读下去……”

随着iOS 7的发布,苹果在其最新的iOS设备上引入了64位体系结构。 但这并不意味着它们仅支持64位架构,但同时支持32位和64位架构。 这可能会导致问题,因此我们必须遵循某些规则:

a)如下表所示,某些数据类型的64位运行时环境需要更多的内存。 因此,我们需要更加注意内存优化。

b)如果您的应用程序是为64位和32位运行时环境提供的,则它们可能使用相同的数据池。 例如,通过服务器与云或在设备之间交换数据。 在这些情况下,我们必须确保变量或对象使用的数据类型的内存大小和偏移量不变。

c)要求范围大于数据类型限制的数字的计算可能会受到影响。 例如,值大于32位整数容量的整数在64位运行时环境中可能会产生不同的结果。

d)如果将值从较高精度的数据类型分配给较低精度的数据类型(如从NSInteger到int),则值可能会被截断。

在64位运行时环境中,NSInteger和int的大小如下表所示:-

所以发生了什么变化:

指针的大小,大小,长整数,CFIndex和NSInteger从4个字节增加到8个字节。

您可以找到有关Objective-C的其他帖子onestopios.com

相关阅读:-

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID55

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID330

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ControlFlow.html#//apple_ref/doc/uid/TP40014097-CH9-ID120