"OC基础"这个分类的文章是我在自学Stephen G.Kochan的《Objective-C程序设计第6版》过程中的笔记。

1、有时候初始化需要让对象带有初始值,那么可以定义另一个初始化方法来使用,比如:

-(XCLASS *) initWith: (int) n {

self = [super init];

if(self) {

[self setFunction: n];  // setFunction方法是指XCLASS定义的赋值方法

}

return self;

}

这个方法的意思是:首先用父类的init方法先把对象初始化,然后用if(self)判断是否初始化成功(初始化成功则self不为空,判断条件成立;注意没初始化的话,self的值是空的),成功则使用赋值方法给对象赋值,那么这就是一个带赋值的初始化方法了。

同时为了方便使用,甚至可以再进一步重载init方法,如下:

-(instancetype) init {

return [self initWith: 0];

}

那么当使用init方法的时候,就会自动使用重载过的方法,给对象赋初始值0。方法的返回类型instancetype表示未确定具体返回类型,因为你不知道使用重载过的init方法的会是哪一个继承后的类。重载init方法有一个标准模板,如下:

-(instancetype) init {

[super init];

if(self){

}

return self;

}

2、关于几种变量的理解:

(1)、局部变量:语句块内部的变量,比如方法内部的变量,当方法运行的时候才存在。局部变量默认初始化为nil,它们是没有“记忆力”的,比如方法的局部变量,每次方法返回后,它们的值就消失了,重新调用方法的时候,这些局部变量都会重新初始化以此。方法的参数也是局部变量;

(2)、实例变量:即是对象所包含但不属于某个方法的变量,在多个不同方法调用的过程中会保持自己的值,在对象存在的过程中实例变量一直跟随存在。不同的对象都会有自己的一套实例变量,哪怕它们是同个类的;

(3)、静态变量:用static修饰的变量是为静态变量,它的值会一直存在,甚至可以跨越不同的实例,即是说,不同的实例可以去修改它的值,并且会共同累加;

(4)、全局变量:在文件中所有方法和类之外的地方定义的变量,在这个模块中任何位置都可以引用这个变量的值。全局变量一般以g开头;

(5)、外部变量:当你访问其他文件定义的全局变量的时候,那么这个全局变量对你来说就是外部变量,你需要先把它声明一遍,使用语法类似:

extern int gXxx;

然后才可以给它赋值使用,不能在声明后立刻跟上等号进行赋值,会报错。

3、如果使用static把全局变量声明为静态变量,则只有这个文件中在这个声明语句后面的方法可以访问这个变量,其他文件中的方法就访问不了。

4、关于属性和实例变量:

(1)、属性是指用@property和@synthesize声明过的变量,这些属性可以直接用点运算符代替setter方法和getter方法;而实例变量必须配合setter方法和getter方法才能访问,没法直接访问;

(2)、声明属性之后会自动生成对应的实例变量(不过代码没有显式地表达处理)。如果只使用@property而没有使用@synthesize,那么xxx对应的实例变量是_xxx,注意是有下划线的。

5、关于枚举数据类型:

(1)、枚举数据类型使用enum来定义,如语句:

enum flag {true, false};

定义了数据类型flag,而声明为flag类型的变量只能有两个值,true或者false。声明称枚举数据类型的格式如下:

enum flag xxx;

注意enum仍然要跟着;

(2)、枚举数据类型里的各个标识符,其实是被编译器当做整型数来处理,第一个标识符被赋值为0,接下来的依次递增。在代码中有主动赋值的标识符,可以改变默认的递增值,没有主动赋值的,会根据前一个值递增,如下:

enum direction {up, down, left=10, right};

四个值依次被赋值为0、1、10、11;

(3)、不同的标识符可以共享同一个值,如下:

enum boolean {no=0, false=0, yes=1, true=1};

(4)、定义一个枚举数据类型month,分别把十二个月对应为12个整数,那么假设有如下代码:

enum month thisMonth;

thisMonth = December;

那么以下代码是可以运行的,即是可以直接把标识符当做整型数来运算:

lastMonth = (enum month) (thisMonth – 1);

(5)、可以在声明枚举数据类型的时候不给它命名,同时直接声明一个该类型的变量,如下:

enum {east, west, north, south} direction;

并没有指定这个枚举类型的名称,同时直接声明了一个此类型的变量direction。

6、关于typedef语句:typedef语句用来给已有的数据类型指派另一个名称,可以增加代码的可读性。比如某个整型的变量n在程序中是要用作计数器,那么可以用以下代码:

typedef int Counter;

那么当使用Counter n来声明n 的时候,就能很清晰知道n是要用作计数器,虽然这个语句的效果是和int n一样的。

7、在表达式求值中的数据遵守以下的转换规则:不同类型的操作数在运算时,会统一转换成精度高的类型进行运算,计算出来的结果也是高精度的类型。以下的数据类型中越靠前的精度越高:

(1)、long double

(2)、double

(3)、float

(4)、long long int

(5)、long int

(6)、int

(7)、Bool、char、short int、bit field、enum

注意:第(7)的数据类型在运算时全部会转换成int类型。

8、位运算符:

(1)、位运算符可以处理任何类型的整型值,但不能处理浮点数。数据会被转化为二进制表示法进行运算;

(2)、与运算(&):两个二进制数相对应的位置进行运算,只有当两个数对应位置都为1时结果才为1,其他情况都为0。即是AND运算;

(3)、或运算(|):两个二进制数相对应的位置进行运算,只有当两个数对应位置都为0时结果才为0,其他情况都为1。即是OR运算;

(4)、异或运算(^):相同为0,相反为1XOR运算;

(5)、一次求反运算(~):所有的位的值全部反过来;

(6)、向左移位运算(<<):所有位向左移一位,超出数据项的高位的位将丢失,低位移入的位值为0;

(7)、向右移位运算(>>):把值向右移一位,低位的数据将丢失。对于无符号的数,左边移入的值为0。对于有符号的数,如果最左边的位为0(正数),移入的也会是0,如果左边的数是1(负数),有些计算机会移入1(算术右移),有些计算机会移入0(逻辑右移)。

(8)、DeMorgan规则:~(~a&~b) == a|b,~(~a|~b) == a&b。

OC基础7:变量和数据类型的更多相关文章

  1. Java编程基础——常量变量和数据类型

    Java编程基础——常量变量和数据类型 摘要:本文介绍了Java编程语言的常量变量和数据类型. 常量变量 常量的定义 一块内存中的数据存储空间,里面的数据不可以更改. 变量的定义 一块内存中的数据存储 ...

  2. OC基础--成员变量的封装

    一.封装的作用: 1.重用 2.不必关心具体的实现 3.面向对象三大特征之一 4.具有安全性 二.OC中成员变量的命名规范以及注意事项 1.命名规范--.成员变量都以下划线“_”开头 1)为了跟get ...

  3. iOS开发笔记系列-基础4(变量与数据类型)

    对象的初始化 对象的初始化方法一般都如下: -(id)init { self=[super init]; if(self){ ... } return self; } 这个方法首先会调用父类的初始化方 ...

  4. java基础知识—变量、数据类型和运算符

    1.变量:存储数据的一个基本单元.2.变量的声明和赋值: 1)声明并赋值;数据类型 变量名=值 例如:int prince=10; 2) 声明.赋值分为两步: 数据类型 变量名: 例如:int=pri ...

  5. Python入门基础之变量和数据类型

    在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-80 ...

  6. OC基础:实例变量和成员变量的区别 分类: ios学习 OC 2015-06-14 17:59 16人阅读 评论(0) 收藏

    摘要:  Objective-C  引入了"实例变量"的概念,但同时, 也经常出现 "成员变量"的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢 ...

  7. 廖雪峰Java1-2Java程序基础-2变量和数据类型

    1.变量 变量是可以持有某个基本类型的数值,或者指向某个对象. 变量必须先定义后使用 定义: 变量类型 变量名 = 初始值; 2.java基本数据类型 整数类型:long int short byte ...

  8. Java基础-4变量与数据类型

    变量:变量是Java程序中的一个基本存储单元.变量是一个标识符.类型及一个可选初始值的组合定义.所有的变量都有一个作用域,即变量在某一区域有效. 基本的变量声明方式如下: int a; float b ...

  9. JavaScript 基础知识 变量与数据类型

    一.区分大小写 JS中一切(变量/函数名/操作符)都是严格区分大小写的 二.标识符 变量.函数.属性的名字以及函数的参数 命名规则:1.第一个字符可以是字母.下划线.美元符号$ 2.其他的字符可以是字 ...

  10. python基础之变量与数据类型

    变量在python中变量可以理解为在计算机内存中命名的一个存储空间,可以存储任意类型的数据.变量命名变量名可以使用英文.数字和_命名,且不能用数字开头使用赋值运算符等号“=”用来给变量赋值.变量赋值等 ...

随机推荐

  1. hdu 3874 Necklace(bit树+事先对查询区间右端点排序)

    Mery has a beautiful necklace. The necklace is made up of N magic balls. Each ball has a beautiful v ...

  2. LeeCode(Database)-Customers Who Never Order

    Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL qu ...

  3. 剑指offer-面试题8.旋转数组的最小数字

    题目:把一个数组最开始的若干个元素搬到数据的末尾,我们称之为 数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组 的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...

  4. Linux中查看是否是固态硬盘(SSD)

       最近在准备测试,需要看看哪些机器挂载的是ssd硬盘,Google了一圈看到了许多方法,但都云里雾里的,不知道怎么确定.ssd硬盘貌似使用的也是scsi接口,所以根据盘符的名称也是判断不出来的.最 ...

  5. AFNetWorking网络请求

    NetWorkAPIClient.h #import <Foundation/Foundation.h> #import "AFHTTPRequestOperationManag ...

  6. C/C++中经常使用的字符串处理函数和内存字符串函数

    一.            字符处理函数 1.        字符处理函数:<ctype.h> int isdigit(int ch) ;//是否为数字,即ch是否是0-9中的字符 int ...

  7. lua select

    可以用这样的方法产生类似foreach的功能: function printargs(...) local num_args = select("#", ...) for i = ...

  8. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...

  9. Unity 4.6 uGUI的点击事件

    因为Unity 4.6刚刚发布,自带的uGUI功能的相关资料还不是很完善,今天刚装的Unity 4.6,想看一下uGUI是否好用,那么开始就今天的学习吧啊! 1,新建一个空的工程.

  10. diffuse linux 文件比对工具

    linux下比较好用的可视化文件比对工具