zoukankan      html  css  js  c++  java
  • OC语法5——@property和@synthesize

    @property和@synthesize:

      我们回想一下:

      在OC中我们定义一个Student类需要两个文件Student.h 和 Student.m。

      Student.h(声明文件):定义成员变量,并且为了使外界可以访问操作这些成员变量,需要定义set和get方法提供给外界。最后还要定义自定义的功能方法。

      Student.m(实现文件):实现文件实现set和get方法,并且实现自定义的功能方法。

      假如,Student类中有很多个成员变量,那我们若手动定义成员变量,再一个一个声明它们的set和get方法,并且一个一个的在Student.m文件中实现set和get方法,这样无疑是无聊而低效的。

      为了提高开发效率,XCode为了提供了便捷:

      OC中引入了@property关键字。

    @property  char *  _name;
    @property  int  _age;

    在Student.h文件中这样写,XCode编译器会自动生成set和get的方法声明。

    注意:千万要注意,@property int _age; 替换的只是set和get方法,所以在花括号里还是要照常定义成员变量,而只在声明set和get方法的地方用@property取代。

    而在Student.m文件中,用@synthesize可以自动生成set和get方法的实现,从而取代手写代码。

    需要说明的是,@synthesize _age; 会自动在Student.h文件中寻找名为_age的成员变量。若有,则实现set和get方法;若无,则在Student.m文件中自己创建个_age成员变量,但该_age是私有的(private)!另外,若这样写@synthesize age; 编译器会自动在.h文件中寻找age,若无,则自动创建一个变量_age。注意,是_age。

    另外需要说明的是:在XCode 4.5以上版本中,只要编译器检测到了Student.h文件中的@property int _age;不仅会自动在Student.h文件中声明set和get方法,还会自动在Student.m文件中实现set和get方法。

    所以,只需开发者在Student.h中写@property int _age; 不仅把不用手写set,get方法的声明和实现了,甚至连@synthesize也不用写了!

    在以后的开发中我们就这样写,很方便。但我们也要清楚它最本质的代码写法。

  • 相关阅读:
    leetcode-mid-array-5. Longest Palindromic Substring
    leetcode-mid-array-334 Increasing Triplet Subsequence-NO
    leetcode-mid-array-3 Longest Substring Without Repeating Characters
    leetcode-mid-array-49 Group Anagrams
    leetcode-mid-array-73 set matrix zeros
    leetcode-mid-array-31 three sum-NO
    ANOVA-方差分析和单尾方差分析
    MTLD -词汇复杂度的指标
    shell脚本-2
    from __future__ import
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/4296825.html
Copyright © 2011-2022 走看看