一、@property
@property是一种新的编译器功能,表明了一个新对象的属性,与@synthesize配对使用。在一个类中,如果需要访问该类的实例变量,一般的方法是编译set和get函数,但这样一般比较麻烦,现在使用@property则省去许多麻烦,@property预编译的作用是自动声明属性的setter和getter方法。@synthesize表示创建该属性的访问器,在之后的main()函数中,可以使用点表达式,使我们更加容易地访问对象的属性。
1、在头文件中:
@property int count;
等效于在头文件中声明2个方法:
- (int)count;
-(void)setCount:(int)newCount;
2、实现文件(.m)中
@synthesize count;
等效于在实现文件(.m)中实现2个方法。
- (int)count
{
return count;
}
-(void)setCount:(int)newCount
{
count = newCount;
}
二、静态变量
1、静态全局变量
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。
它有一下几个特点:
(1)剪子未经初始化的静态全局变量会被自动初始化为0;
(2)静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
(3)它始终驻留在全局数据区,直到程序运行结束。
2、静态局部变量:
(1)static类内部变量同auto自动变量(即未加 Static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,2者作用域相同;两者的不同在于:auto自动变量会随着函数 被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘 若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一 直占据存储空间的变量。
(2)静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。
(3)当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
三、协议
1、非正式协议(interface)
非正式协议是NSObject的范畴类,可以认为继承NSObject的类。
2、正式协议
协议不是类本身,它们仅定义了其它对象有责任实现的接口。当在自己的类中实现协议的方法时,用户的类就是遵守这个协议的,协议声明的方法可以被任何一个类实现。
协议的语法结构如下:
@protocol ProtocolName //协议名
methodDeclaration; //方法名
@end
如何使用协议
而在类声明时,语法如下:
@interface ClassName : ParentClassName < ProtocolName>
然后在该类的实现文件中,实现该协议的方法methodDeclaration