1.static
ios中static只能作用于.m文件中,在.h文件中会有警告
在函数体内 static 变量的作用范围为该函数体,不同于 auto 变量。
(1)该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外的其它函数访问;
(3)在模块内的 static 函数只能被这一模块内的其它函数调用,而且这个函数的使用范围也被限制在声明
它的模块内;
(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
2.import,class,include
@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import。
而#import比起#include的好处就是不会引起重复包含。
3.const
const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。可以减少bug的出现。
4.atomic 和nonatomic
在设置@property属性时,默认为atomic,提供线程安全,因为在多线程环境下,加了atomic,setter函数会变成下面这样:
@property ******p
-(void)setp:(***)newValue
{
[p lock];
if(property!=newValue)
{
[p release];
p=[newValue retain];//此处不能p=newValue(原因不详....求解??)
}
[p unlock];
}
因此也可以这样来理解,atomic是OC的一种线程保护,可以防止在set未完成时被另外一个线程读取,造成数据的错误.但是一般情况下还是用nonatomic,因为atomic是比较耗费资源.
5.assign
用于基础数据类型:NSInteger,CGFloat BOOL和C数据类型int,float,double,char
此标记说明设置器直接进行赋值,不设置就会是默认的.在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,此时就需要明确的指出这个标记,而不是简单的使用默认值,否则的话,你将得到一个警告.这再次向编译器说明你确实需要赋值,即使它是可拷贝的.
6.retain
此属性只能用于OC对象类型,不能用于Core Foundation对象,因为retain增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数
7.copy
此属性只对那些实行了NSCopying协议的对象类型有效,拷贝由copy方法执行