Objective-C语法总结

看来不精通OC还是不行的,今天开始再重新来回顾一遍OC所有的语法。
从无到有凝练一遍。
加油💪!

第一章 基础部分

1.1 程序逻辑结构

Objective-C 的程序分为三个部分

  • @interface部分
    这一部分声明了相关类、属性等的声明
    在实际的工程中,这部分的声明写在.h文件里面。也有一些属性(出于方便?)会定义.m文件里。
  • @implementation部分
    这一部分定义了相关类、属性等的声明,
    在实际的工程中,这部分的声明写在.m文件里面。
  • Program部分
    这一部分以main函数开头。实际的工程里面涉及到底层代码的入口?

1.2 类、属性语法

[ClassName Method]
可以理解为 [Receiver Message]
初始化一个类

ClassName *VariableName = [[ClassName alloc] init]]

第二章 控制流-循环结构

2.1 for 循环

OC的For循环跟C语言的如出一辙。

for (n = 1, sum = 0; n <= 10; n++ ) {
    sum = sum + n;
}

for 循环的任何位置都可以包含多个表达式 ,只要用逗号分隔这些表达式(不是多条语句而是多个表达式)即可。

2.2 while 语句

本章内容都是与C相似

while ( expression )
    program statement

2.3 do 语句

do 语句是while的简单转置,它把循环条件放在循环的结尾,而不是开头。

do
    program statement
while (  expression );

2.4 break 语句

break 退出当前循环

break;

2.5 continue语句

continue 跳过当前循环中的某些语句直到当前这环循环的结尾

第三章 控制流-选择结构

3.1 if语句

if ( expression ) 
   program statement

3.2 if-else结构

if ( expression )
   program statement 1
else 
   program statement 2

3.3 复合条件测试

  • 逻辑与 &&
  • 逻辑或 ||

3.4 switch 语句

不添加break会自动贯穿

switch ( expression )
{
    case value1:
        program statement
        program statement
          ...
        break; 
    case value2:
    case value3:
        program statement
        program statement
          ...
        break; 
      ...
    case valueN:
        program statement
        program statement
          ...
        break; 
    default:
        program statement
        program statement
          ...
        break;
}

3.5 条件运算符

condition ? expression1 : expression2

第四章 类

4.1 分离接口和实现文件

通常类的声明( @interface 部分 )要放在它自己的名为 ClassName.h 的文件中。 而类的定义( @implementation 部分 )通常放在同名的ClassName.m。 并在ClassName.m文件中使用以下语句将接口文件导入到实现文件中去#import "ClassName.h"

< >是引用系统文件。
" "双引号是引用本地文件

4.2 合成存取方法

1.在@interface 中声明的时候在属性前面加上 @property
2.在@implemetation 中实现的时候在属性前面加上 @synthesize

如果没有给变量加上存取方法的话,这个变量只能在类的内部被访问。也就是说用对象访问属性 [ObjectName propertyName] 会失败。

注意⚠️:如果只用了@property 而没有用@sythesize的话,编译器生成的实例变量会以下划线 _ 字符作为变量名称的第一个字符。

除了自动存取方法意外,用同名函数setProperty: value 可以定义设值方法,同名的property: 可以定义取值方方法。

注意⚠️: 自动合成的方法不要以 new,alloc,copyinit开头,因为编译器会自动合成相应的方法。

@interface ClassName : NSObject
@property type propertyName;
@end

@implementation ClassName : NSObject
@synthesize propertyName;
@end

4.3 访问属性

定义一个类ClassA
类有一个属性aProperty

ClassA className = [[ClassA alloc] init ];
// 访问属性
className.aProperty //方式一
[className aProperty] //方式二

注意⚠️: .点运算符通常用在属性上,用于设置或取得实例变量的值。也就是说除了访问设置和取值方法外,在良好的编码风格上来说,只能访问属性。

4.4 方法

4.4.1 多参数方法

@interface Class : NSObject
- (void) runFromAPlace : (NSString *) aPlace toAPlace: (NSString *) aPlace;

4.4.2 不带参数名的方法

@interface Class : NSObject
- (void) runFromAPlace : (NSString *) aPlace: (NSString *) aPlace;

4.5 变量

4.5.1 局部变量

局部变量是基本的C数据类型,并没有默认的初始值,所以在使用前要先赋值,。局部变量初始化为nil。
方法的参数就是一种局部变量。 但是如果方法的参数是类的话,因为类是引用的,所以可以修改里面的数据。

4.5.2 static 静态变量

在变量声明前加上关键字 static, 可以使局部变量多次调用保留同一个值
静态变量在程序开始时初始化一次,自动赋值为 0

注意⚠️: 类方法中定义的静态变量在被不同的实例调用时,引用的是同一个静态变量。比如一个方法中有一个统计次数的静态变量 count, 所有实例调用它都会让它加一,所以它统计的是所有对象的次数之和。
通常会将变量的声明放在 implementation 文件的开始处使得所有方法都可以访问到。

4.6 在方法中分配和返回对象

不管对象在那里被创建,只要它的引用为0就会被销毁,因为在方法里面创建并返回的对象始终被引用,所以没有背销毁。而局部变量的作用域只有在方法内。所以,在方法结束后,就没有对它的引用,也就自然被销毁了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容