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)相关推荐

  1. 【IOS 开发】Objective - C 入门 之 数据类型详解

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38544659 1. 数据类型简介及输出 (1) 数据类型简介 ...

  2. 第二节 CSS入门介绍

    一.背景 这里将陆续介绍前端CSS中相关知识,先介绍CSS2.1,后续会介绍CSS3的相关属性,通过该系列的文章,希望能给准备转战前端的人员一些帮助,同时也帮助自己梳理知识,文章中如有错误,欢迎指出. ...

  3. Objective-C KVC

    为什么80%的码农都做不了架构师?>>>    KVC概述KVC是KeyValue Coding的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制.而不是通过调用S ...

  4. ObjC: 使用KVO

    KVC很多人都知道,那么什么是KVO呢?Key Value Observing,直译为:基于键值的观察者. 主要用于有关视图界面交互编程中,比如,实体(或者叫名词.或者叫域模型),在应用中表示名词的部 ...

  5. Apache Spark 2.2.0 中文文档 - GraphX Programming Guide | ApacheCN

    GraphX Programming Guide 概述 入门 属性 Graph 示例属性 Graph Graph 运算符 运算符的汇总表 Property 运算符 Structural 运算符 Joi ...

  6. vue 点击li 中的img 怎么不冒泡_Vue全解

    一.Vue实例 内存图: 1.把Vue的实例命名为vm,vm对象封装了对视图的所有操作包括数据读写.事件绑定.DOM更新 2.vm的构造函数是Vue,按照ES6的说法vm所属的类是Vue 3.opti ...

  7. 3、管理员添加内容的实现

    前面已经实现了登录在查询后返回admin字符串从而启动管理员界面 管理员主要管理功法.装备.怪的添加和删除 在这篇主要讲添加 首先得创建几张表来存储相应的数据 对应字段的含义在后面会提到 说完数据库再 ...

  8. 关东升给的ios学习路线图(可以借鉴)

    来源: http://www.zhijieketang.com/classroom/3/introduction 首页 课程 免费课程 会员 关于我们 登录 注册 首页 iOS课程 iOS会员-iOS ...

  9. Apache Spark 3.0 GraphX编程指南

    学习地址:https://spark.apache.org/docs/latest/graphx-programming-guide.html 目录 总览 入门 属性图 属性图示例 图运算符 运营商摘 ...

最新文章

  1. JavaWeb之国际化
  2. php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...
  3. C语言 - 数组作为参数传递给函数(按值传递和按引用传递)
  4. Java 集合中的快速失败(fail-fast)和安全失败(fail-safe)机制
  5. java 长方形正方形_面向对象的疑惑,java设计正方形,长方形
  6. 软件测试归纳法调试,《软件测试艺术》读书笔记(34)_归纳法、演绎法、回溯法、测试法调试及其原则、错误分析...
  7. java根据逗号拆分_Excel拆分单元格文本,一列变多列,你学会了吗?
  8. 研磨设计模式之简单工厂模式-3
  9. 自定义水晶报表的外观
  10. CSDN,我来了!kbd哈哈哈哈/kbd
  11. Android Studio 星座查询系统
  12. 区块链溯源是如何实现的?
  13. DI的概念和实现原理—Spring系列介绍
  14. 相机标定与矫正(总结)
  15. ERP系统实施与企业内部控制管理实践
  16. 微信小程序解密用户数据失败
  17. ESC, ESP, VSC 电子稳定系统 与 ABS
  18. Python基于Django的毕业设计论文提交过程管理系统
  19. 16路开关量输入转RS-485/232,数据采集远程DI模块 WJ61
  20. 计算机系素描教材,[计算机软件及应用]素描基础教程PPT.ppt

热门文章

  1. 【Electron-Vue】使用 el-table 死活不显示的问题
  2. 计算机无法发现蓝牙设备,电脑搜索不到蓝牙设备的解决方案
  3. 在 Win 7 下使用 VirtualBOX 虚拟机安装 OS X 10.8 Mountain Lion 及 Xcode 4.5
  4. 初认OFDM(四):CFO的影响和估计
  5. 社交相亲聊天软件公众号、app一应俱全
  6. 每日三题 10.13
  7. 2020年汽车驾驶员(技师)考试题库及汽车驾驶员(技师)复审考试
  8. Spring-01 概述 IOC理论思想
  9. 中南大学电子信息 单片机_沙漠老师讲专业系列三:电子信息类相关专业解读(2)...
  10. Python之异常(一)