关于iOS中属性变量setter与getter方法的理解

 更新时间:2017年06月21日 10:19:32   作者:劉光軍_Shine  
这篇文章主要给大家介绍了关于iOS中属性变量setter与getter方法的相关资料,文章介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

关于成员变量、实例变量、属性变量

成员变量

@implementation ViewController {
  UILabel *textLabel;
  int count;
}

成员变量是用于类的内部,无需与外界接触的变量。成员变量默认是protected,因为成员变量不会生成set、get方法,所以无法和外界接触,从上面代码可以看出来,成员变量是定义在{ }中的变量,如果变量的数据类型是一个类,就如:UILabel *textLabel;那么称这个变量为实例变量。所以实例变量也是成员变量的一种特殊情况,所以实例变量也是类内部使用的,无需与外部接触的变量,这个也就是所谓的类私有变量。

实例变量

UILabel *textLabel;

刚在上面说了,实例变量是成员变量的一种特殊情况,实例变量本质上就是成员变量,只是实例是针对的类而言的。

属性变量

@interface ViewController ()
 
@property (nonatomic, strong) UIButton *nextBtn;
 
@end

属性变量是用于与其他对象交互的变量。

属性变量

@interface MyModel : NSObject
 
@property (nonatomic, copy) NSString *age;
 
@end

现在我们声明属性用的最多的方式就是这样子。编译器会自动生成一个以下划线开头的实例变量_age,不需要自己手动再去写实例变量。而且也不需要在.m文件中写@synthesize age;当然这个方式也会自动为你生成setter,getter方法。

@synthesize 声明的属性=变量。意思是,将属性的setter,getter方法,作用于这个变量。@synthesize还有一个作用,就是可以指定与属性对应的实例变量,例如我可以这样写@synthesize age = myAge;,那这样子的话我们去调用的时候self.age其实是操作的实例变量myAge,而不是_age了。

属性的setter和getter方法

//setter方法
- (void)setAge:(NSString *)age {
  _age = age;
}
//getter方法
- (NSString *)age {
  return _age;
}

上面代码是属性的setter和getter方法。

  • setter是给外部提供一个修改内部属性值的接口,通过给对象指针发送该消息(调用setter方法)可以做到修改内部属性值。
  • getter 方法是外界提供一个查看内部变量的的接口 。

注意

1、属性的setter方法和getter方法是不能同时进行重写的,这是因为,一旦你同时重写了这两个方法,那么系统就不会帮你生成这个成员变量了,所以会报错,如果真的就想非要重写这个属性的setter和getter方法的话,就要手动生成成员变量,然后就可以重写了。或者是用

@synthesize:
@synthesize age = myAge;
 
- (void)setAge:(NSString *)age {
  myAge = age;
}
 
- (NSString *)age {
  return myAge;
}

2、在getter方法中最后返回return _age;而不是return self.age, 这是因为点语法实际上是对setter和getter方法的调用,如果在getter方法中调用return self.age的话,就会循环调用。

3、在重写属性的setter方法的时候我们一般都是这样写:

- (void)setInfoArr:(NSArray *)infoArr {
  _infoArr = infoArr;
  _infoArr = @[@"我是数组"];
}

我们需要在setter方法中加上这句_infoArr = infoArr;,我们在重写setter方法的时候将新值infoArr 赋值给属性变量_infoArr 以便我们在外面调用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • iOS导航栏控制的一些总结

    iOS导航栏控制的一些总结

    这篇文章主要给大家介绍了关于iOS导航栏控制的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • IOS实现上滑隐藏NvaigtionBar而下拉则显示效果

    IOS实现上滑隐藏NvaigtionBar而下拉则显示效果

    这篇文章给大家介绍了如何实现APP上滑时隐藏navigationBar而下拉则又会显示,虽然也是隐藏但是效果和其他完全不一样,因为以前没做过所以试着去实现一下,现在分享给大家,有需要的可以参考借鉴。
    2016-09-09
  • iOS实现两个控制器之间数据的双向传递

    iOS实现两个控制器之间数据的双向传递

    这篇文章主要为大家详细介绍了iOS实现两个控制器之间数据的双向传递的相关资料,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • iOS中判断Emoji表情问题

    iOS中判断Emoji表情问题

    在项目中遇到ios判断emoji表情的问题,下面小编把我的解决方案分享到脚本之家平台供大家参考
    2016-06-06
  • iOS点击推送消息跳转处理

    iOS点击推送消息跳转处理

    这篇文章主要介绍了iOS点击推送消息跳转处理 的相关资料,需要的朋友可以参考下
    2016-04-04
  • 深入浅析IOS中UIControl

    深入浅析IOS中UIControl

    UIControl,相信大家对其并不陌生吧,比如平常最常用的UIButton就是继承自UIControl的。下面通过本篇文章给大家介绍ios中UIControl,感兴趣的朋友一起学习吧
    2015-10-10
  • iOS性能优化浅析

    iOS性能优化浅析

    给大家通过理论和经验分析了IOS性能优化各方面的问题,以及处理的对应办法,有需要的朋友参考下。
    2018-02-02
  • iOS实现不规则Button点击效果实例代码

    iOS实现不规则Button点击效果实例代码

    这篇文章主要给大家介绍了关于iOS实现不规则Button点击的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • IOS开发中的设计模式汇总

    IOS开发中的设计模式汇总

    在ios的程序开发中,经常搞晕ios的开发模式,今天小编就给大家简单的总结一下,需要的的朋友参考下
    2017-03-03
  • iOS仿微信相机拍照、视频录制功能

    iOS仿微信相机拍照、视频录制功能

    这篇文章主要为大家详细介绍了iOS仿微信相机拍照、视频录制功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论