黑马程序员-------OC----@property和@synthesize
2015-09-19 13:42
369 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
当定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,所以Xcode提供了@property和@synthesize属性,@property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现。
我们之前定义属性的时候,在{…}中进行定义,而且定义完之后还有可能需要实现get/set方法,这里直接使用@property关键字进行定义:
这样定义完之后,我们就可以使用这个属性了:
这样定义的方式之后,这个属性就会自动有set/get方法了
第一步生成_userName属性
第二步为_userName属性自动生成set/get方法
还可以指定想要实现的属性名:
在main函数中:
结果为:
可以看到,实际上被赋值的是_name,而不是name
因为我们使用@property定义属性之后,如果我们想修改这个属性的名称,就可以使用@synthesize关键字来对属性名称进行修改
几点说明:
1.在Xcode4.5及以后的版本中,可以省略@synthesize ,编译器会自动帮你加上getter 和 setter 方法的实现,并且默认会去访问
_age这个成员变量,如果找不到_age这个成员变量,会自动生成一个叫做 _age的私有成员变量。
当定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,所以Xcode提供了@property和@synthesize属性,@property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现。
@property关键字
#import <Foundation/Foundation.h> @interface Person : NSObject { @public NSString *name; NSString *_name; } @property NSString *name; @end //第一步生成_userName属性 //第二步为_userName属性自动生成set/get方法 //property在生成的set方法中,有没有做引用的操作? //set方法的三种方式: //第一种方式: //普通赋值 //一般对象类型的引用操作 //NSString对象类型的引用操作 //第一个位置 //atomic:线程保护的,默认 //nonatomic:线程不保护的 //第二个位置 //assign:直接赋值,默认 //retain:保留对象 //copy:拷贝对象 //第三个位置 //readwrite:生成get/set方法,默认 //readonly:只生成get方法
我们之前定义属性的时候,在{…}中进行定义,而且定义完之后还有可能需要实现get/set方法,这里直接使用@property关键字进行定义:
@property NSString *name;
这样定义完之后,我们就可以使用这个属性了:
这样定义的方式之后,这个属性就会自动有set/get方法了
第一步生成_userName属性
第二步为_userName属性自动生成set/get方法
@synthesize关键字
正常使用:@synthesize name;
还可以指定想要实现的属性名:
#import "Person.h" @implementation Person @synthesize name = _name; @end
在main函数中:
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [[Person alloc] init]; p.name = @"aaa"; NSLog(@"name is %@,_name is %@",p->name,p->_name); } return 0; }
结果为:
2015-09-19 13:47:17.052 property[1528:56901] name is (null),_name is aaa
可以看到,实际上被赋值的是_name,而不是name
因为我们使用@property定义属性之后,如果我们想修改这个属性的名称,就可以使用@synthesize关键字来对属性名称进行修改
几点说明:
1.在Xcode4.5及以后的版本中,可以省略@synthesize ,编译器会自动帮你加上getter 和 setter 方法的实现,并且默认会去访问
_age这个成员变量,如果找不到_age这个成员变量,会自动生成一个叫做 _age的私有成员变量。
相关文章推荐
- 程序员每天该做的事
- 黑马程序员——Java基础——面向对象的特征(二)
- 腾讯面试经历2015
- 黑马程序员_java基础_Map集合
- 进职场记(三)-求职
- 黑马程序员-------OC----点语法
- 一道google面试题
- 面试、笔试题记录
- 黑马程序员_编写程序,获取两个字符串中最大相同子串
- 黑马程序员-------OC----关联关系和依赖关系
- 【.Net码农】C#.net文件批量上传解决方案附下载(swfupload)2015-8-28更新
- 8个让程序员追悔莫及的职业建议
- 黑马程序员--NSString前后缀检查及搜索
- 黑马程序员--NSRange的使用
- 老程序员推荐的7个开发类工具
- 面试准备之css篇
- 黑马程序员——ios开发基础之OC中Foundation框架(二)、copy以及单例
- 七个对我最好的职业建议(精简版)
- 黑马程序员——ios开发基础之OC中的Foundation框架(一)
- 黑马程序员——ios开发基础之OC中的分类、协议、延展和代理