Objective-c入门-属性(7)
Objective-c有一条便捷途径,可以简化存取方法的过程。该途径称为属性。
通过属性可以简化代码。
目录
一、声明属性
二、属性的特性
三、用逗号调用存取方法
三、BNRPerson完整代码
四、练习
一、声明属性
在BNRPerson.h中删除实例变量,然后用下面两个属性heightInMeters和weightInKilos重写存取方法的声明。
@interface BNRPerson : NSObject
//BNRPerson类有两个属性
@property (nonatomic) float heightInMeters;
@property (nonatomic) int weightInKilos;//{
// //BNRPerson类拥有两个实例变量
// float _heightInMeters; //身高
// int _weightInKilos; //体重
//}
……
@end
属性的声明以@property开始 。
声明属性的时候,编译器不仅会帮你声明存取方法,还会根据属性的声明实现存取方法。
也就是说,在BNRPerson.m中不需要再写存取方法了,因为我们已经声明了属性,直接使用编译器生成好的存取方法就可以了,于是BNRPerson.m变成了如下的样子。
@implementation BNRPerson
//BNRPerson类拥有计算Body Mass Index的方法
-(float) bodyMassIndex
{float h = [self heightInMeters];return [self weightInKilos] / (h * h);
}
@end
二、属性的特性
属性的声明可以有一个或多个属性特性。
默认属性不需要在声明中设置。
非原子性:nonatomic
原子性:atomic,默认值
属性要么是原子性要么是非原子性。区别和多线程运行有关。
只读性:readonly
读写属性:readwrite,默认值
可拷贝性:copy,每当声明一个指向NSString或NSArray对象的属性时,都需要设置copy属性。
三、用逗号调用存取方法
修改main.m中的文件:
#import <Foundation/Foundation.h>
#import "BNRPerson.h"
int main(int argc, const char * argv[]) {@autoreleasepool {BNRPerson* mikey = [[BNRPerson alloc] init];//使用存方法给实例变量赋值mikey.heightInMeters = 1.62;mikey.weightInKilos = 46;//使用取方法打印实例变量的值float height = mikey.heightInMeters;int weight = mikey.weightInKilos;NSLog(@"mikey is %.2f meters tall and weights %d kilos", height, weight);//使用定制的方法打印相应的BMI的值float bmi = [mikey bodyMassIndex];NSLog(@"mikey has a BMI of %.2f", bmi);}return 0;
}
使用点号调用存取方法的时候实际上是在发送消息。
根据使用情况,可能发送一条至两条消息。
也就是根据是否读取,调用相应的取方法或存方法。
三、BNRPerson完整代码
.h文件
#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface BNRPerson : NSObject
//BNRPerson类有两个属性
@property (nonatomic) float heightInMeters;
@property (nonatomic) int weightInKilos;//{
// //BNRPerson类拥有两个实例变量
// float _heightInMeters; //身高
// int _weightInKilos; //体重
//}
//BNRPerson类声明实例方法
-(float) heightInMeters;
-(void) setHeightInMeters:(float) h;
-(int) weightInKilos;
-(void) setWeightInKilos:(int) w;
//BNRPerson类拥有计算Body Mass Index的方法
-(float) bodyMassIndex;
@end
NS_ASSUME_NONNULL_END
.m文件
#import "BNRPerson.h"@implementation BNRPerson
//BNRPerson类拥有计算Body Mass Index的方法
-(float) bodyMassIndex
{float h = [self heightInMeters];return [self weightInKilos] / (h * h);
}
@end
main.m文件
#import <Foundation/Foundation.h>
#import "BNRPerson.h"
int main(int argc, const char * argv[]) {@autoreleasepool {BNRPerson* mikey = [[BNRPerson alloc] init];//使用存方法给实例变量赋值mikey.heightInMeters = 1.62;mikey.weightInKilos = 46;//使用取方法打印实例变量的值float height = mikey.heightInMeters;int weight = mikey.weightInKilos;NSLog(@"mikey is %.2f meters tall and weights %d kilos", height, weight);//使用定制的方法打印相应的BMI的值float bmi = [mikey bodyMassIndex];NSLog(@"mikey has a BMI of %.2f", bmi);}return 0;
}
四、练习
本小节木有练习的,是本人附加的
Objective-c入门-属性(7)相关推荐
- 【IOS 开发】Objective - C 入门 之 数据类型详解
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38544659 1. 数据类型简介及输出 (1) 数据类型简介 ...
- 第二节 CSS入门介绍
一.背景 这里将陆续介绍前端CSS中相关知识,先介绍CSS2.1,后续会介绍CSS3的相关属性,通过该系列的文章,希望能给准备转战前端的人员一些帮助,同时也帮助自己梳理知识,文章中如有错误,欢迎指出. ...
- Objective-C KVC
为什么80%的码农都做不了架构师?>>> KVC概述KVC是KeyValue Coding的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制.而不是通过调用S ...
- ObjC: 使用KVO
KVC很多人都知道,那么什么是KVO呢?Key Value Observing,直译为:基于键值的观察者. 主要用于有关视图界面交互编程中,比如,实体(或者叫名词.或者叫域模型),在应用中表示名词的部 ...
- Apache Spark 2.2.0 中文文档 - GraphX Programming Guide | ApacheCN
GraphX Programming Guide 概述 入门 属性 Graph 示例属性 Graph Graph 运算符 运算符的汇总表 Property 运算符 Structural 运算符 Joi ...
- vue 点击li 中的img 怎么不冒泡_Vue全解
一.Vue实例 内存图: 1.把Vue的实例命名为vm,vm对象封装了对视图的所有操作包括数据读写.事件绑定.DOM更新 2.vm的构造函数是Vue,按照ES6的说法vm所属的类是Vue 3.opti ...
- 3、管理员添加内容的实现
前面已经实现了登录在查询后返回admin字符串从而启动管理员界面 管理员主要管理功法.装备.怪的添加和删除 在这篇主要讲添加 首先得创建几张表来存储相应的数据 对应字段的含义在后面会提到 说完数据库再 ...
- 关东升给的ios学习路线图(可以借鉴)
来源: http://www.zhijieketang.com/classroom/3/introduction 首页 课程 免费课程 会员 关于我们 登录 注册 首页 iOS课程 iOS会员-iOS ...
- Apache Spark 3.0 GraphX编程指南
学习地址:https://spark.apache.org/docs/latest/graphx-programming-guide.html 目录 总览 入门 属性图 属性图示例 图运算符 运营商摘 ...
最新文章
- JavaWeb之国际化
- php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...
- C语言 - 数组作为参数传递给函数(按值传递和按引用传递)
- Java 集合中的快速失败(fail-fast)和安全失败(fail-safe)机制
- java 长方形正方形_面向对象的疑惑,java设计正方形,长方形
- 软件测试归纳法调试,《软件测试艺术》读书笔记(34)_归纳法、演绎法、回溯法、测试法调试及其原则、错误分析...
- java根据逗号拆分_Excel拆分单元格文本,一列变多列,你学会了吗?
- 研磨设计模式之简单工厂模式-3
- 自定义水晶报表的外观
- CSDN,我来了!kbd哈哈哈哈/kbd
- Android Studio 星座查询系统
- 区块链溯源是如何实现的?
- DI的概念和实现原理—Spring系列介绍
- 相机标定与矫正(总结)
- ERP系统实施与企业内部控制管理实践
- 微信小程序解密用户数据失败
- ESC, ESP, VSC 电子稳定系统 与 ABS
- Python基于Django的毕业设计论文提交过程管理系统
- 16路开关量输入转RS-485/232,数据采集远程DI模块 WJ61
- 计算机系素描教材,[计算机软件及应用]素描基础教程PPT.ppt
热门文章
- 【Electron-Vue】使用 el-table 死活不显示的问题
- 计算机无法发现蓝牙设备,电脑搜索不到蓝牙设备的解决方案
- 在 Win 7 下使用 VirtualBOX 虚拟机安装 OS X 10.8 Mountain Lion 及 Xcode 4.5
- 初认OFDM(四):CFO的影响和估计
- 社交相亲聊天软件公众号、app一应俱全
- 每日三题 10.13
- 2020年汽车驾驶员(技师)考试题库及汽车驾驶员(技师)复审考试
- Spring-01 概述 IOC理论思想
- 中南大学电子信息 单片机_沙漠老师讲专业系列三:电子信息类相关专业解读(2)...
- Python之异常(一)