@property @snythesize @stastic 协议

 

一 属性的声明:

@property NSString * name

@snythesize name;

与下列两个方法是等价的

-(void)setName:(NSString*)nam;

-(NSString *)name;

-(void)setName:(NSString *)nam

{

name = nam;

}

-(NSString *)name

{

return name;

}

上边的两种方法,很明显的可以看出第一种方法的优点是不必要写那么多的代码,因为这两个语句就是告诉编译器,要编译器自动生成settergetter方法

下边介绍@property@snythezise的使用方法

@property(参数)

参数主要分为三种

读取类型:(readwritereadonly

readonly:只能生成getter方法,不能生成setter方法,所以不可以和copyretainassign方法一起使用

Readwrite既能生成getter方法也可以生成setter方法

2 setter语意:(retainassigncopy

retain:释放掉旧的对象,然后把旧对象的值赋给新输入的对象,再把新对象的索引值提高到1

Assign简单赋值,不给计数器值加1

Copy建立一个计数器值为1的对象,释放掉新的对象

3 原子性atomicity(nonatomic)

Atomic的意思是setter/getter这个函数是一个原语操作,如果有多个线程同时调用setter方法的话,不会出现在一个线程执行setter全部语句之前,另一个线程开始执行setter的情况,相当于函数的头尾加了锁一样。

Nonatomic不保证原语操作,所以可能会娶不到完整的东西。

所以,如果不需要多线程支持的时候,nonatomic就可以了,另外由于不涉及锁的操作,所以速度更快

atomic的意思就是setter/getter这个函数是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样。

@snythezise name;

生成相应的getter方法

例如

@property(nonatomitic,copy) Class * aclass;

@snythezise aclass;

等同于

-voidsetAClass : (Class)_aClass

{

If(aClass != _aClass)

{

[aClass release] ;

aClass = [_aClass copy];

    }

}

-(Class *)aClass

{

Return Aclass;

}

二 协议

协议是一组公开的方法声明,谁实现协议,就要实现协议中的方法声明。协议的关键字是protocol,以@protocol开始以@end结束,在某个类中要应用协议时,只要在类的后边<协议名>就可以,协议方法的实现,只要在类的实现中,实现就好。协议还可以扩展已有的协议。协议的方法中有@optional@required两种,前者的方法可以实现也可以不实现,但是后者的方法一定要实现,协议中默认的方法都是@requied

三 非正式协议

在已经定义好了的类中,想要添加新的方法,可以不必修改类,利用类别可以实现。类别category,在类名的后边加上(类别名),如果类别中的方法,在类中已经有声明实现,类别中的方法将把原来的方法覆盖掉,类别的一个缺点是,只可以添加方法,不可以添加属性。利用这一缺点,我们可以把类中的某些方法,不再类中实现,而在类别中实现,可以使类的方法在多个.m文件中实现,简化了文件的管理。类别还有一种方法就是非正式协议,非正式协议继承于NSObject类,大多数类都继承于这个类,所以可以在任何类中使用类别。

四 静态变量

静态变量的关键字是static。静态变量的存储形式是静态的,相当于全局变量。

变量特点

静态局部变量

静态局部变量就是在函数内部定义的变量,生命周期是整个源程序,但是作用函数是函数体内部,即当退出函数,变量仍存在,只是不可以再用了,静态局部可以手动赋初值,但是如果不赋值的话,系统会自动给变量赋值为0,但是自动变量不赋值,他的值是不固定的。虽然离开函数后他的值不可以再被使用,但是当再次调用函数的时候,又可以继续使用,并且保留了前一次函数调用后的变量的值

例如

Int fun(int n)

{

Static int f = 1;

F = f * n;

Return n;

}

Int main()

{

For(int i = 1; i < 4 ;i ++)

{

Printf(“fun(%d)=%d”,i,fun[i]);

}

}

Output

Fun(1)=1;

Fun(2)=2;

Fun(3)=6;

去掉static

Int fun(int n)

{

int f = 1;

F = f * n;

Return n;

}

Int main()

{

For(int i = 1; i < 4 ;i ++)

{

Printf(“fun(%d)=%d”,i,fun[i]);

}

}

Output

Fun(1)=1;

Fun(2)=2;

Fun(3)=3;

变量定义

在全局变量的前边加上static后,就定义了静态全局变量,静态全局变量的存储方式肯定是静态的,但是加上了static关键字后,作用域就会发生改变了,只能在文件内部使用,不可以再同程序的其他文件使用,非静态的全局变量在各个源文件中都是有效的。非静态的全局变量在各个源文件中都是有效的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值