ios中的关键字总结

来源:互联网 发布:数据库存储过程怎么用 编辑:程序博客网 时间:2024/06/05 11:09

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方法执行


0 0
原创粉丝点击