黑马程序员--较深入研究@property
来源:互联网 发布:身份证阅读器接口java 编辑:程序博客网 时间:2024/05/19 09:02
---------培训学习技术型博客,欢迎多多交流
一,简介
Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略
下面以 Person 类为例:
在. h 文件中:
@interface Person : NSObject
{
NSString * _name;
NSString * _sex;
NSInteger _age;
}
@property NSString * name;
@property NSString * sex;
@property NSInteger age;
表示声明了三个属性: name,sex,age, 默认生成3个对应的 setter 和 getter 方法
在. m 文件中:
@implementation Person
@synthesize name = _name;
@synthesize sex = _sex;
@synthesize age = _age;
@end
表示实现3个 setter 和 getter 方法,其中 name = _name 表示说在 getter 和 setter 方法中操作的实例变量是_name,如果省略了_name,_age,_sex, 那么会在. h 文件中生成同名的实例变量 name,sex,age(注意:这里并没有下划线),此时生成的 setter 和 getter 方法所操作的实例变量是 name,sex,age, 所以_name,_sex,_age 并没有被操作.
在 ios5.0后,@synthesize也可以省略不写,此时在. h 文件中只写@ property 即可,编译器会自动生成相应的实例变量,实例变量的名字是属性名称前加下划线.二声明
@property (参数1,参数2) 类型 名字;
如:
@property(nonatomic,retain) UIWindow *window;
其中参数主要分为三类:
读写属性: (readwrite/readonly/setter = /getter = )
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite
产生setter\getter方法
readonly
只产生简单的getter,没有setter, 默认的读写属性.
setter =
指定生成setter方法的名字
getter =
指定生成getter方法的名字
assign
默认类型,setter方法直接赋值,而不进行retain操作, 适用于基本数据类型, 对对象类型, 不会发生引用计数变化.
retain
setter方法对参数进行release旧值,再retain新值。
copy
setter方法进行Copy操作,与retain一样
atomic
保证多线程访问下的安全, 但浪费系统资源, 原子性控制的默认设置.
nonatomic
禁止多线程,变量保护,提高性能
三 参数类型详解
参数中比较复杂的是retain和copy,具体分析如下:
getter分析
1、 @property(nonatomic,retain)test* thetest;
@property(nonatomic ,copy)test* thetest;
等效代码:
-(test*)thetest
{
return thetest;
}
2、@property(retain)test* thetest;
@property(copy)test* thetest;
等效代码:
-(test*)thetest
{
[thetest retain];
return [thetest autorelease];
}
setter分析
1、
@property(nonatomic,retain)test* thetest;
@property(retain)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest {
if (thetest!= newThetest) {
[thetest release];
thetest= [newThetest retain];
}
}
2、@property(nonatomic,copy)test* thetest;
@property(copy)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest {
if (thetest != newThetest) {
[thetest release];
thetest= [newThetest copy];
}
}
0 0
- 黑马程序员--较深入研究@property
- 黑马程序员---oc类的深入研究!
- 黑马程序员--深入研究Runtime
- 黑马程序员_类的深入研究
- 黑马程序员-ios学习笔记 oc @property
- 黑马程序员---property用法
- 黑马程序员-oc@property
- 黑马程序员 --- @property参数
- 黑马程序员-深入研究java.lang.Class类
- 黑马程序员_OC学习之类的深入研究
- 黑马程序员-----@property和@synthesize
- 黑马程序员----@property的参数
- 黑马程序员---@property和@synthesize
- 黑马程序员--@property的使用
- 黑马程序员-----@property参数学习
- 黑马程序员--ios基础--oc内存管理--@property参数、循环引用、autorelease
- 黑马程序员---深入线程
- 《黑马程序员》类加载器及其委托机制的深入研究
- LeetCode-Add Binary
- 与AngularJS的约会之事件循环+watchers源码分析
- Math对象的几个取整方法(ceil,floor,round)
- [LeetCode]Sliding Window Maximum
- 黑马程序员———OC中的内存管理
- 黑马程序员--较深入研究@property
- 你的态度,你的旅途风景
- 黑马程序员---浅析深浅复制
- 黑马程序员-iOS应用设计规范大全
- WIN7卸载ORACLE
- Oracle安装错误ora-00922(缺少或无效选项)
- Python学习笔记1
- window远程桌面连接 Ubuntu 14.04
- Leetcode# 198 House Robber