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语法中多参数传递方法经常是初学者最容易犯困的地方.我自己也是刚刚悟出来与大家分享. 分析 由于我们已有的语言经验告诉我们定义方法都是: 一个类型匹配一个参数(动态语言甚 ...
随机推荐
- Google自写插件详解
谷歌插件详解,跳转至个人主页查看. GoogleExtension
- Sql-exec
--显示sql server现有的所有数据库 exec sp_helpdb --查看数据表设置的约束 exec sp_helpconstraint SubjectType --update selec ...
- (转) AJAX POST&跨域 解决方案 - CORS
跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免 ...
- Ubuntu 18 使用docker安装rancher/server:stable并运行kubernetes
1.安装docker sudo apt-get install docker.io docker的版本:Docker version 17.12.1-ce 2.安装virtualbox-qt,因为vi ...
- recommendation baselines
整理recommendation baseline 的实现代码和方法归类: bpr: https://github.com/gamboviol/bpr fpmc: https://github.c ...
- 第三次Scrum
1.小组成员 周 斌舒 溢许嘉荣唐 浩黄欣欣廖帅元刘洋江薛思汝 2.小组第三次冲刺完成情况 github仓库小组的第三次任务是完成体系结构环境图和系统原型图.在体系结构设计中,分为上级系统----把目 ...
- Linux 虚拟机虚拟网卡问题导致无法连接问题
问题描述 当 Linux 虚拟机启动时,通过串口输出或者启动日志, 观察到虚拟网卡启动或者初始化故障, 导致虚拟机无法连接. 问题分析 常见的超时报错范例如下: CentOS 复制 Bringing ...
- 微软发布Azure Stack第一个技术预览版
为了提升商业灵敏度和加快创新步伐,各个企业都在迅速地转向云服务.在微软,我们已经见到微软智能云Azure的飞速发展和使用,每月我们都有近十万的新增订阅量.然而,我们也了解到还有很多企业在完全移到公有云 ...
- SVN常用功能介绍(二)
说明 上一章节主要描述了SVN的简介.安装搭建,和项目管理人员对SVN的常用操作. 这章主要讲解,SVN对应角色组员,在实际运用中的常用操作. 将SVN服务器项目导入到开发组员的本地电脑里 方式一: ...
- 解决maven工程无法创建src/main/java包名的方法
我的maven工程不知道为什么无法创建src/main/java这样的包,我创建好的maven工程只有src/main/resources包,其他的主要包都没有,而且不能创建包,new出来的包都是一个 ...