OC开发系列-@property和@synthesize
property和synthesize
创建一个Person类。提供成员属性的_age和_height的setter和getter方法。
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
int _height;
}
- (void)setAge:(int)age;
- (int)age;
@end
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
@end
开发中考虑封装性将成员属性通过提供setter与getter结构供外界访问。但是这些setter跟getter代码没有任何技术含量。于是苹果提供关键字property和synthesize 关键字利用编译器特性将我们自动生成setter跟getter方法。
@property int age;
// - (void)setAge:(int)age;
// - (int)age;
@synthesize age;
/*
- (void)setAge:(int)age
{
}
- (int)age
{
}
*/
@synthesize age虽然帮我们实现了set跟get方法的实现,并未指定将外界传递的值对哪个成员属性进行赋值。如上Person类需要给成员_age复制。
@synthesize age = _age;
如果我们使用@synthesize age没有指定给哪个成员复制,那么会自动访问与@synthesize后面同名的成员属性,如果没有同名的成员属性也会自动生成同名私有成员变量。
通过@property 和@synthesize我们可以对Person类简写成如下
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
int _height;
}
@property int age;
@property int height;
@end
#import "Person.h"
@implementation Person
@synthesize age = _age;
@synthesize height = _height;
@end
上面的Person类还可以继续进行简写,不写成员变量。xcode编译器自动生成带有下划线的私有成员变量。这是由于Xcode的功能强大。
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@property int height;
@end
#import "Person.h"
@implementation Person
@synthesize age = _age;
@synthesize height = _height;
@end
Xcode4.4之后property关键字可以独揽@synthesize的功能。因此Person类可以简写:
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@property int height;
@end
#import "Person.h"
@implementation Person
@end
自动生成的下划线成员属性特点:
* 自动生成下划线的成员属性是私有的,子类是不可以直接访问的
* 如果手动生成_成员属性,系统则不会帮我们生成
* 如果手动同时重写setter跟getter实现,xcode不会帮我们生成下划线属性
OC开发系列-@property和@synthesize的更多相关文章
- OC语法5——@property和@synthesize
@property和@synthesize: 我们回想一下: 在OC中我们定义一个Student类需要两个文件Student.h 和 Student.m. Student.h(声明文件):定义成员变量 ...
- OC开发系列-内存管理
概述 移动设备的内存极其有限,每个app所有占用的内存是有限的.当app所占用的内存比较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间. 任何集成了NSObject的对象都需要手动进行 ...
- OC基础--关键字@property 和 @synthesize
一.@property关键字需要掌握的知识: 1.用在@interface中,用来自动生成setter和getter的声明 例:@property int age;--相当于执行了右边的代码--> ...
- OC开发系列-成员变量的作用域
成员变量的作用域 OC中成员变量有四种作用域,同时每一种作用域对应着响应的关键字. * @private:自能在当前类的实现@implementation中访问 * @protected: 可以在当前 ...
- OC开发系列-类与对象
面向对象 面向对象思想是一种解决问题的思想, 不在是面向过程的去思考问题怎样解决.面向对象解决问题时首先要考虑需要找几个对象能解决这个问题. 常见的概念: * Object Oriented 面向对象 ...
- OC中两个关键字的作用:@property和@synthesize
两个关键字的使用:@property和@synthesize 一.@property关键字这个关键字是OC中能够快速的定义一个属性的方式,而且他可以设置一些值,就可以达到一定的效果,比如引用计数的问题 ...
- OC学习篇之---@property和@synthesize的使用
在之前一片文章我们介绍了OC中的内存管理:http://blog.csdn.net/jiangwei0910410003/article/details/41924683,今天我们来介绍两个关键字的使 ...
- iOS runtime探究(三): 从runtime開始理解OC的属性property
你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要解说runtime相关知识, ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
随机推荐
- [转] bae中thinkphp的REWRITE 正确配置方法
URL_MODEL =2下. 官方的:app.conf不能用,害人呀.. 留意以下红色部分,正则要分开来写,坑爹的 正确的配置: handlers: handlers: - expire : .jpg ...
- Retrofit全攻略——进阶篇
最近事比较多,距离上次写文章已经过去了一个月了.上一篇文章Retrofit全攻略——基础篇 介绍了Retrofit的基础用法,这篇文章介绍点进阶的用法. 打印网络日志 在开发阶段,为了方便调试,我们需 ...
- idea中如何查看jar包中的源码(非maven),以oracle的ojdbc为例
文章目录 背景 解决 背景 工作需要查看oracle的部分源码(ojdbc.jar),maven并没有这个依赖,单纯的导入jar包无法查看. 解决 将ojdbc.jar 安装到本地仓库,maven从本 ...
- webpack中代理配置(proxyTable)
注:用axios请求 1,下载axios npm i axios --save 2,在config文件下的index.js中配置代理地址 参考:https://vuejs-templates.gith ...
- 拾遗:Vim 批量删除匹配到的行
删除包含特定字符的行 g/pattern/d (全局删除匹配行) ,5g/pattern/d (删除第1-5行里的匹配行) 删除不包含指定字符的行 v/pattern/d g!/pattern/d ( ...
- certbot免费证书
yum install python-certbot-nginx 开启防火墙443端口 firewall-cmd --add-port=443/tcp --permanent 别忘了重启 firewa ...
- 整合phoenix4.6.0-HBase-1.0到cdh5..4.7 编译phoenix4.6源码 RegionServer 宕机
Phoenix 集成HBase Phoenix 版本:phoenix-4.6.0-HBase-1.0 源码下载地址: http://apache.cs.uu.nl/phoenix/phoenix-4. ...
- Redis数据结构之跳跃表-skiplist
在Redis中,zset是一个复合结构: 使用hash来存储value和score的映射关系 使用跳跃表来提供按照score进行排序的功能,同时可以指定score范围来获取value列表 结构 zse ...
- pycharm的第一次使用(其实并不是第一次)
file --> settings --> editor -->general --> change font size file --> settings --> ...
- 【HDUOJ】几道递推DP
就不写题解了.很基础的递推. HDU2084数塔 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 代码: #include <iostre ...