现在正在学习OC,就把我最近学习的历程跟大家分享一下,希望能对后来者有帮助,写的不好的地方希望大家给予建议
1.注释
在编写程序时,注释是非常重要的。我跟大家一些刚学编程的人一样,总觉得添加程序是一件非常量费时间、而且没意义的事,但当我现在去看我以前写的稍微复杂一点的程序,我发现我都不是很容易看懂它是怎么写的了。说这么多就是想要告诉大家注释的重要性。
对一份规范的程序源代码而言,注释应该占到源代码的1/3以上。Objective-C中提供了基本的单行注释和多行注释语言。
单行注释就是在程序中注释一行代码,将双斜线(//)放在要注释的内容前面;多行注释是一次性将多行代码注释掉,使用“/*”和“*/”将需要注释的内容包含起来。
2.标识符和变量
1).分隔符
Objective-C语言中的分号(;)、花括号({})、方括号([])、圆括号(())、空格、圆点(.)都具有特殊的分隔作用。
*分号
在Objective-C中,分号作为语句的分隔,因此,每个Objective-C语句必须使用分号作为结尾。Objective-C程序允许一行书写多个语句,用分号隔开就好;一个语句也可以跨过多行,在最后加上分号就行
*花括号
花括号的作用就是定义一个代码块,一个代码块指的就是“{”和“}”所包含的一段代码。代码块在逻辑上是一个整体。对Objective-C语言而言,类的成员部分需要放在花括号中定义,方法体部分必须放在一个代码块里。条件语句中的条件执行语句和循环语句中的循环体通常也放在代码块里。(看到这里大家也许就要问了,什么是类啊,这个不要着急,后面会说到的)
花括号总是成对存在的,有一个“{”,则必然有一个“}”,反之亦然。
*方括号
方括号的主要作用是用于访问数组元素,方括号通常紧跟着数组变量名,而方括号里指定希望访问的数组元素的索引。例如a[0],访问a数组中的第一个元素。
Objective-C的对象调用方法时,通常与需要使用方括号括起来。
*圆括号
在定义函数时,必须使用圆括号来包含所有行参声明,调用函数时也必须 使用圆括号来传入实参值。在表达式中,圆括号还可以将某一部分括成一个整体,优先运算。还可以作为强制类型转换的运算符
*空格
Objective-C语言使用空格分隔一条语句的不同部分。Objective-C语言是一门格式自由的语言,所以空格几乎可以出现在程序的任何地方,也可以出现任意多个空格,但不要用空格把一个变量名隔开成两个,这将导致程序出错
Objective-C语言中的空格包含空格符(Space)、制表符(Tab)、和回车(Enter)等。
*圆点
圆点通常作为类/对象和它的属性之间的分隔符,表明调用某个类或某个实例的指定成员。
2).标识符规则
标识符是用于给程序中变量、类、方法命名的符号。Objective-C语言的标识符与C语言的区别就是多了个美元符$,开头必须是字母、下划线或美元符,后面可以跟任意数目字母、数字、下划线和美元符。标识符不可以包含空格,不能使用Objective-C的关键字,长度没有限制。
Objective-C是区分大小写的,所以abc和Abc是不同的
*标识符可以由字母、数字、下划线和美元符组成,但不能以数字开头
*不能是关键字,但可以包含关键字
3.数据类型分类
Objective-C要求所有变量必须先声明,后使用,声明变量时需要制定变量的类型
定义变量时的变量类型可以是Objective-C所支持的任意类型。它支持的数据类型与C语言基本相似
基本数据类型包括整型、浮点型、字符型和枚举型。
指针类型是Objective-C最重要的类型,所有的系统类、自定义类的本质都是指针类型。
还有一种特殊的空类型(null type),空类型就是nil值的类型,这种类型没有名称,所以不可能声明一个空类型的变量,或将变量转换成空类型。空引用(nil)是空类型变量唯一的值。空引用(nil)可以转换为任何引用类型。
在实际使用中,可以忽略空类型,嘉定假定nil只是指针类型的一个特殊直接量
4.基本数据类型
Objective-C的基本数据类型可以分为四类:整型、字符型、浮点型和枚举型。因为语C语言中的基本数据类型基本相同,我们在C语言中也经常会使用前三种,所以,这里就说一下枚举型,还有Objective-C中的输出函数NSLog。
NSLog()是Foundation提供的一个功能非常强大的输出函数,它不仅可以输出字符串,也可以输出整数、C风格的字符串和Objective-C对象
支持的格式字符语C语言基本相同,就是多了个一个%@用来输出Objective-C对象
*枚举型
如果一个变量只有几种可能的值,比如,代表太阳系行星的变量,只有金星、木星、水星、火星、土星、地球、天王星、海王星。这种变量就可以定义为枚举变量
定义枚举变量有两种方式:
1.先定义枚举类型,再用枚举类型定义变量。比如:enum season {spring,summer,fall,winter}; 然后用该枚举类型定义变量 enum season myLove , yourLove;
2.定义匿名枚举类型时直接定义变量。比如:enum {male,female} me , you;
使用枚举变量需要注意以下几点
*枚举时{}中列出来的枚举值,也称枚举常量或枚举元素,这些枚举值不是变量,因此不能对它赋值,但可以在定义时指定它的值。如果没有指定,每个枚举变量按他们的顺序,依次为0、1、2、3,以此类推,若指定了,那么后一位为前一位+1.
*枚举常量的本质是无符号整数,因此,枚举值可以用来比较大小。比较大小用的就是他们实际的整数值。
*枚举值的本质是无符号整数,因此,Objective-C允许直接将整数值赋给枚举变量,甚至可以直接把枚举变量当成整数使用。
*BOOL类型
Objective-C提供了一个BOOL类型,BOOL类型的值有YES和NO两个值,分别代表真和假。YES和NO两个值的底层其实就是1和0.
5.类型转换
1.自动类型转换
*把整型类型(包括字符型)的变量赋给浮点型变量,不会有太大的变化。
*把浮点型类型的变量和值赋给整型(包括字符型)变量,数值的小数部分会被直接舍弃。
*当把取值范围大的变量和值赋给取值范围小的变量时,可能发生溢出
2.强制性类型转换
强制性类型转换的运算符是圆括号(()),例如:int a = 100; int b = 3; float f = (float) a / b;
3.表达式类型的自助提升
6.运算符
1.算数运算符
Objective-C支持所有的基本算数运算符,+、-、*、/、++、--、%,用法和C语言一样
2.赋值运算符
Objective-C使用“=”作为赋值运算符。
3.位运算符
Objective-C支持的位运算符有6个:
*&:按位与(同 1 才为 1,其余为 0)
*|:按位或(同 0 才为 0,其余为 1)
*~:按位非
*^:按位异或
*<<:左位移运算符
*>>:右位移运算符
4.扩展后的赋值运算符
+=:对于 x += y,继而对应 x = x + y。还有其他九种以此类推。 -= 、 *= 、 /= 、 %= \ &= 、\= 、 ^= 、 <<= 、 >>=。
5.比较运算符
>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)、!=(不等于)。
6.逻辑运算符
&&(与)、||(或)、!(非)、^(异或)。
7.逗号运算符
逗号运算符用于将多个表达式“连接”起来,而整个逗号表达式返回最后一个表达式的值。
8.三目运算符
三目运算符(? ;)用法是 表达式1 ? 表达式2 ; 表达式3,如果表达式1成立运行表达式2,否则运行表达式3.
9.运算符的优先级
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | -- |
() | 圆括号 | (表达式)/函数名(形参表) | -- | ||
. | 成员选择(对象) | 对象.成员名 | -- | ||
-> | 成员选择(指针) | 对象指针->成员名 | -- | ||
| |||||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
~ | 按位取反运算符 | ~表达式 | |||
++ | 自增运算符 | ++变量名/变量名++ | |||
-- | 自减运算符 | --变量名/变量名-- | |||
* | 取值运算符 | *指针变量 | |||
& | 取地址运算符 | &变量名 | |||
! | 逻辑非运算符 | !表达式 | |||
(类型) | 强制类型转换 | (数据类型)表达式 | -- | ||
sizeof | 长度运算符 | sizeof(表达式) | -- | ||
| |||||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | |||
% | 余数(取模) | 整型表达式%整型表达式 | |||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | |||
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | |||
| |||||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | |||
< | 小于 | 表达式<表达式 | |||
<= | 小于等于 | 表达式<=表达式 | |||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | |||
| |||||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
| |||||
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
| |||||
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | -- |
/= | 除后赋值 | 变量/=表达式 | -- | ||
*= | 乘后赋值 | 变量*=表达式 | -- | ||
%= | 取模后赋值 | 变量%=表达式 | -- | ||
+= | 加后赋值 | 变量+=表达式 | -- | ||
-= | 减后赋值 | 变量-=表达式 | -- | ||
<<= | 左移后赋值 | 变量<<=表达式 | -- | ||
>>= | 右移后赋值 | 变量>>=表达式 | -- | ||
&= | 按位与后赋值 | 变量&=表达式 | -- | ||
^= | 按位异或后赋值 | 变量^=表达式 | -- | ||
|= | 按位或后赋值 | 变量|=表达式 | -- | ||
| |||||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | -- |
好了,今天的博客就到这了,欢迎大家给我提意见。