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语法中多参数传递方法经常是初学者最容易犯困的地方.我自己也是刚刚悟出来与大家分享. 分析 由于我们已有的语言经验告诉我们定义方法都是: 一个类型匹配一个参数(动态语言甚 ...
随机推荐
- zookeeper安装及使用
0. 下载并安装 1. 开机启动 cd /etc/rc.d/init.d touch zookeeper vi zookeeper #!/bin/bash #chkconfig #descripti ...
- BZOJ2882: 工艺(后缀数组)
题意 题目链接 Sol 直接把序列复制一遍 后缀数组即可 在前\(N\)个位置中取\(rak\)最小的输出 #include<bits/stdc++.h> using namespace ...
- springboot 使用webflux响应式开发教程(二)
本篇是对springboot 使用webflux响应式开发教程(一)的进一步学习. 分三个部分: 数据库操作webservicewebsocket 创建项目,artifactId = trading- ...
- 【Android】Warning :uninstalling will remove the application data!
最近从Android Studio向手机发布项目过程中经常出现, 问题虽小,但是开发过程中确实浪费时间. It is possible that issue is resolved by uninst ...
- keras 联合训练
转自: https://blog.csdn.net/Yan_Joy/article/details/62235704
- [acm 1001] c++ 大数加法 乘法 幂
北大的ACM 1001 poj.org/problem?id=1001 代码纯手动编写 - - #include <iostream> #include <cstdio> #i ...
- beifencode
package com.hesheng.myapplication; import android.content.Context;import android.graphics.Bitmap;imp ...
- html5自我总结
2017年7月30日 合抱之木,生于毫末.九层之台,起于累土.软件行业要熟记和训练的东西有很多,在此,写一下如何快速搭建html及自我见解(这里只介绍我自己用到的,还有部分存在但是用不到的就不讲解了) ...
- WebLogic如何设置session超时时间
1.web.xml 设置WEB应用程序描述符web.xml里的<session-timeout>元素.这个值以分钟为单位,并覆盖weblogic.xml中的TimeoutSecs属性 ...
- Skip List & Bloom Filter
Skip List | Set 1 (Introduction) Can we search in a sorted linked list in better than O(n) time?Th ...