关于get、set方法以及点语法的使用

首先写一个简单的get,set方法来熟悉它的作用

//Fraction.h
@interface Fraction:NSObject
-(void)setNumber:(int) n;
-(int)getNumber;
//Fraction.m
#import Fraction.h
@implementation Fraction
{
    int number;
}
-(void)setNumber:(int)n;{
    number = n;
}
-(int)getNumber{
  return number;
}

以上的实例不难看出,set、get实际上是两个函数:set方法无返回值,有一个参数,get方法有返回值,无参数,它的返回值就是set方法中接收的那个参数。因此把set方法和get方法统称为存取方法。下面就出现了合成存取方法:@property。

首先@property定义的属性的命名应该与实例变量相同,虽然这不是必须要这样做。@property定义在h文件中,可以将上面的get、set函数简化为如下:

//Fraction.h
@interface Fraction:NSObject
@property int number;
@end

在实现文件中,实际上是有synthesize函数的:

//Fraction.m
#import Fraction.h
@implemention Fraction
@synthesize number;

synthesize告诉OC编译器,为number这个属性生成一对设值方法和取值方法。接下来问题就来了:我使用set方法和get方法时候设值取值直接在main函数中使用[]调用方法就可以了,那么property是怎么设值取值的呢?

按照之前的方法,要获得myFraction(对象名)中存储的number的值,应该使用以下语句

//main.mFraction *myFraction = [[Fraction alloc]init];[myFraction number];

这个操作实际上就是向myFraction对象发送number消息,从而返回所需的值,有了属性之后,就可以通过使用点运算符编写以下等价的表达式

//main.m
Fraction myFraction = [[Fraction alloc]init];
myFraction.number = 3;

也就是说,点语法实际上是一种特殊的调用函数的方法而已。需要指出的是,也可以对自定义的方法调用点语法:例如如果有一个取值方法定义为numerator,那么可以在程序中使用myFraction.numerator进行赋值,尽管numerator没有被定义为属性。但是点运算符通常是用在属性上,用于设置或者取得实例变量的值。其它方法的调用通常还是使用[]语法进行调用。

最后需要补充的是,实现文件中的@synthesize是可以省略的,如果省略的话,编译器会地洞分别命名底层的实例变量为_number。

---恢复内容结束---

时间: 2024-10-13 20:03:53

关于get、set方法以及点语法的使用的相关文章

EF基于方法的查询语法

实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员使用 Visual Basic 或 Visual C# 根据实体框架概念模型编写查询.针对实体框架的查询由针对对象上下文执行的命令目录树查询表示.LINQ to Entities 将语言集成查询 (LINQ) 查询转换为命令目录树查询,针对实体框架执行这些查询,并返回可同时由实体框架和 LINQ 使

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

Objective-C Block方法与笑笑语法

#pragma mark - block语法 NSLog(@"========block方法1==========="); [students sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { Student *stu1 = (Student *)obj1;//这里的obj1就是Student类型的 Student *stu2 = (Student *)obj2; NSLog(@"%ld",[st

Swift3中方法可变参数语法的一些改变

我们知道在Swift2中,默认情况下方法的参数是let值,也就是不可改变的. 不过我们可以在参数前添加var关键字改变其不变性: func foo(var i:Int){ i += 1 print(i) } 不过遗憾的是在Swift2.x+中,已经明确表明方法参数的修饰关键字var将会在Swift3中被移除,所以为了产出这可恶的警告,你必须使用inout关键字,并且在调用方法传递实参时也要加上地址符: fun foo(inout i:Int){ i += 1 print(i) } var i =

Java基础语法----方法

1.1 方法概述 在java中,方法就是用来完成解决某件事情或实现某个功能的办法.方法实现的过程中,会包含很多条语句用于完成某些有意义的功能--通常是处理文本,控制输入或计算数值.我们可以通过在程序代码中引用方法名称和所需的参数,实现在该程序中执行(或称调用)该方法.方法,一般都有一个返回值,用来作为事情的处理结果. 1.2 方法的语法格式 在Java中,声明一个方法的具体语法格式如下: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){ 执行语句 --- re

python进阶之内置函数和语法糖触发魔法方法

前言 前面已经总结了关键字.运算符与魔法方法的对应关系,下面总结python内置函数对应的魔法方法. 魔法方法 数学计算 abs(args):返回绝对值,调用__abs__; round(args):返回四舍五入的值,调用__round__; math.floor():向下取整,调用__floor__; math.ceil():向上取整,调用__ceil__; math.trunc():求一个值距离0最近的整数,调用__trunc__; divmod(a,b):返回商和余,调用__divmod_

iOS开发——面试篇&OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

类的无参方法

1.如何定义类的方法 类的方法必须包括以上三个部分 (1)方法的名称 (2)方法的返回值 (3)方法的主体 语法 public 返回值类型方法名(){ //方法的主体 } 编写方法时,分两步完成 第一步:定义方法名和返回值类型 第二步:在{ }中编写方法的主体部分 编写方法时,要注意以下三点 方法体放在一对大括号中.方法体就是一段程序代码,完成一定的工作 方法名主要在调用这个方法是使用,在java中一般采用骆驼命名法 方法执行后可能会返回一个结果,该结果的类型称为返回值类型.使用return语句

Python常用异常及处理方法

Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIter