概述:OC多输入参数的方法、@protocol的使用、OC中变量、变量的存储类别


1.多输入参数的方法

同单参数和无参数的方法相比,只是需要注意要对新参数建议添加可以识别的标签。

举例:

 //声明

-(void) setIntX: (int) n;  // 一个参数

-(void) setIntX: (int) n andSetIntY:(int) d;

 //调用

 //在调用多参数方法时,可以省略从第二个开始的方法名字

 [test setIntX:1 :2];   //省略了第二个标签,但建议书写时还是带上所有的标签,易于程序的可读


2.@protocol 的使用

协议的作用类似于c++中对抽象基类的多重继承。协议是多个类共享方法的列表,协议中列出的方法在本  类中没有相应的实现,而是由别的类来实现这些方法,如果一个类要遵守一个协议,该类就必须实现特  定协议的所有方法(可选方法除外)

2.1协议是一系列方法的列表,任何类都可以声明自身实现了某一个或一些协议。

在Objective-C 2.0之前,一个类必须实现(它声明自己要符合的)协议中的所有方法,否则编译器会  报告一个错误,表明这个类没有实现协议中所有方法;2.0之后允许标记协议中某些方法是可选的,  这样编译器就不会强制实现这些可选的方法。


2.2通过在@interface中的一对尖括号内列出协议的名称,告诉编译器你正在遵守的一个协议,eg:

@interface Test: NSObject <NSCopying>

例子中,Test类的父类是NSObject,并且遵守了<NSCopying>协议,则在实现Test类时,必须实现NSCopying协议中必须要实现的方法


2.3也可以遵守多项协议,只需要在尖括号中列出多个协议,格式如下:

@interface Test:NSObject <NSCopying,NSCoding>

这样编译器就知道Test类遵守多项协议,Test类中必须实现所有协议中定义的方法


2.4也可以自己定义协议,格式如下:

@protocol Fly

 -(void) go;

 -(void) stop;

@optional   //optional 标记的方法是可选的方法

-(void) sleep;

@end

2.5 协议也可以采用类似继承的思想

@protocol Fly1<Fly>   //因此任何遵守Fly1协议的类必须实现此协议列出的方法和由Fly协议定义的方法



3.OC中变量


3.1局部变量:同其他语言一样,在方法内部定义的变量,作用域只在对应的方法内

3.2全局变量:全局变量是定义在方法外部定义的变量。它不属于哪一个方法,而属于一个源程序文件,其作用域在整个源程序,全局变量的说明符为extern  e.g.

extern int intX;

3.3静态变量

以前在理解静态变量时又些偏颇,现在好好梳理下这块。

首先静态变量就是由static 修饰的变量,静态变量有以下优点,它可以节省内存,因为它是所有对象所共有的,因此,对多个对象来说,静态变量只存储在一处,供所有对象共用。引出静态变量是因为对于方法内部定义的变量即局部变量,在内存的栈上分配的空间,它的作用域只是在该方法内,当方法结束时,栈空间被释放,如果想要在下次调用该方法时获取上次调用的值怎么办呢?又不破坏类的封装性,这就引入了静态变量的概念。


4.变量的存储类别

前面提到两个,extern 和 static

还有auto、const、volatile,重点说一下auto和volatile

auto用于声明一个自动局部变量,是方法内部变量的声明方式,缺省设置。ps:就是局部变量嘛,没啥用貌似

volatile 的作用刚好同const相反,它明确地告诉编译器,该变量的值会发生改变,它用来修饰被不同线程访问和修改的变量。使用volatile修饰的变量是随时可以放生改变的