OC中property方法的使用
我们直入主题,关于property方法,我们先来了解一下相关的知识,首先是成员变量,实例变量,属性变量。
我们定义一个类来看一下
@interface Person :NSObject{
NSInteger age; //年龄变量
NSString *name; //名字变量
}
@property(nonatomic,assign)float height; //身高变量
@property(nonatomic,strong)NSString *skinColor; //肤色变量
@end
@implementation Person
@end
在这个类中,在大括号内定义的变量属于成员变量,成员变量分为实例变量和基本数据类型变量,我们如何去区分呢?如果说这个成员变量是类变量,即实例变量,其他的则为成员变量。在上面的类中,name是字符串类变量,所以是实例变量,age则为成员变量。那么什么是属性变量呢?属性变量就是用property声明的变量,而不必关注是否是类变量,皆为属性变量。到这里相信大家对这几种变量已经很熟悉了。学过Java的同学知道,Java中有get方法和set方法,而且可以很方便的由系统自动生成。那么在OC中能不能由系统自动生成get和set方法呢?答案是可以的。如果我们有很多变量需要写get和set方法,是一个很难操作的过程。在OC中如何实现呢?就是用我们的property方法去生成属性变量。注意,在OC中,只有由property生成的属性变量才带有set和get方法!
那么生成一个属性变量,property就为我们生成了get和set方法。(nonatomic,strong/assing),括号内的各个代码我们暂且先不解释,在目前阶段,我们在写property方法时,第一个都是nonatomic,第二个可以是strong或assign,我们只需要知道,如果变量是OC的类变量,那么我们就选择strong,如果是基础数据类型变量我们就选择assign。往后学会慢慢深入理解。使用property定义的变量,我们在main函数中可以直接调用,也接触到了我们要阐述的另一个知识点,点语法。我们在主函数中实例化一个对象 Person *p = [[Person alloc]init];我们想为身高变量赋值,p.height = 180.0;那么此时我们就使用了点语法,此时我们要注意,使用点语法就相当于调用property给我们生成的get和set方法,如果点语法在等号左边,如前面身高赋值,就是默认调用set
方法,如果点语法在等号右边或直接使用点语法输出数据,则默认调用get方法,如 float temp = p.height;NSLog(@"%f",p.height);点语法只能用于由property生成的属性变量,其他都不可以使用。假如我在类中定义一个方法,在调用的时候则不能使用点语法调用该方法,可以使用中括号调用。
OC中property方法的使用的更多相关文章
- OC中@property属性关键字的使用(assign/weak/strong/copy)
OC中@property属性关键字的使用(assign/weak/strong/copy) 一.assign 用于 ‘基本数据类型’.‘枚举’.‘结构体’ 等非OC对象类型 eg:int.bool等 ...
- OC 中property的使用
property在使用的时候需要在其前面加上@符号,需要将其写在类的头文件中 当在定义一个对象的属性变量时,例如定义一个Person类中的name属性,可定义为: @property (nonatom ...
- 对OC中property的一点理解
最近在看即将要加入的项目的代码,看到一个protocol里包含着几个property.之前没有写过类似的代码,看到这里的时候,突然疑惑了一下,发现自己对property的理解好像有点模糊.所以回家后又 ...
- OC中property的有关属性
property的有关属性: (1)readwrite是可读可写特征:需要生成getter方法和setter方法: (2)readonly是只读特性只会生成getter方法不会生成setter方法: ...
- 网络与多线程---OC中多线程方法GCD(二)
小编在前一篇中介绍了多线程实现的五种常用方法.在接下来所介绍的这种方法是最具有魅力的,最具有诱惑的实现多线程的方案---GCD 一.什么是GCD GCD是Grand Central Dispatch的 ...
- OC中属性及方法
1.声明式属性 a.实例变量 b.声明属性 自动生成setter/getter方法 .h ->@property 属性类型 属性名; .m ...
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...
- OC中的私有变量和description
.OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private ...
- Objective-C中一个方法如何传递多个参数的理解
原来如此 Objective-C语法中多参数传递方法经常是初学者最容易犯困的地方.我自己也是刚刚悟出来与大家分享. 分析 由于我们已有的语言经验告诉我们定义方法都是: 一个类型匹配一个参数(动态语言甚 ...
随机推荐
- vscode 快速生成html
在Hbuilder中新建一个htm自动会生成一个标准的html代码,那在vscode得一行一行写吗?太烦了吧,各种关键词搜,哎妈 终于找到了办法,现在这里记录下: 第一步:在空文档中输入 ! 第二 ...
- VueJS开发所用到的技术栈
1. 主要使用vue.js2. 使用vue-cli脚手架搭建项目3. 使用vue-router来做路由,实现单页面跳转4. 使用iView UI作为前端UI框架,Mouse UI作为手机端UI框架5. ...
- Linux基础之-网络配置,主机名设置,ssh登陆,scp传输
一. 网络配置修改 1.临时修改(ip,dns,netmask,gateway) 临时修改网络配置,只要没有涉及到修改配置文件的,在network服务重启后,所有设置失效 2.永久修改(ip,dns, ...
- C#中的Sealed和J#中的Final比较(转载)
Sealed与Final修饰符其实并不是一个语言平台的产物,他们有着各自所属的语言环境,但这两个关键字都是.Net平台中不可或缺的,那么二者用法几何,随本文一探究竟. 一.Sealed sealed ...
- Creator4.2建模心得与技巧1——树的建立与跟随摄像机旋转
Creator建模: 树一般在虚拟现实程序中都用面来实现,一种方法是通过两个面相互垂直成90度叠放在一起,另一种方法是让树面正对着视角一起旋转.这里主要说一下第二种方法. 主要思路:把树面一直正对着摄 ...
- 任务十四:零基础JavaScript编码(二)
任务目的 在上一任务基础上继续JavaScript的体验 学习JavaScript中的if判断语法,for循环语法 学习JavaScript中的数组对象 学习如何读取.处理数据,并动态创建.修改DOM ...
- freess(未测试)
freess 使用 nodejs 配合 shadowsocks-windows 实现FQ (windows) 使用方法: 如果你没有安装nodejs请先安装,访问 https://nodejs.org ...
- AutoHotkey使用Excel的Com对象可能导致进程残留问题的原因及解决方案
在AutoHotkey脚本中,对Excel的应用体验很不错,xl := ComObjActive("Excel.Application")就和当前Excel表连接了, 通过xl变量 ...
- 使用jMeter构造逻辑上有依赖关系的一系列并发请求
相信前端开发工程师对CSRF(Cross-site request forgery)跨站请求伪造这个概念都非常熟悉,有的时候也简写成XSRF,是一种对网站的恶意利用. 尽管听起来像跨站脚本(XSS), ...
- IOS UIWebView(浏览器控件)
什么是UIWebViewUIWebView是iOS内置的浏览器控件系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件h ...