zoukankan      html  css  js  c++  java
  • [好程序员训练营]Objective-C学习笔记---点语法

    <A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>------我的OC语言笔记,期待与您交流!  

    在java等面向对象的语言中,常常会用到obj.方法,或者用到obj.属性来调用对象的方法和属性。OC为了使使用其他语言的程序设计者更好学习OC,所以OC也引入了点语法,但是从根本上讲,OC的点语法和java等语言的点语法还是有一定区别的,下面我们就来看看怎么使用OC的点语法。

     1  @interface  Person:NSObject{
     2  @private
     3      int age;
     4  }
     5 
     6  -(void)setAge:(int)Newage;            //声明setter函数
     7  -(int)age;                                     //声明getter函数
     8  @end
     9   
    10  @implementation Person                //实现setter和getter函数
    11 -(void)setAge:(int)Newage{
    12    age = Newage;
    13 }
    14 
    15 -(int)age{
    16     return age;
    17 }
    18 int main(int argc, const char * argv[]) {
    19     Person * xiaoming = [Person alloc];
    20   
    21     xiaoming.age = 21;                       //通过点语法为字段age赋值  
    22    NSLog(@"%d",xiaoming.age);         //通过点语法取得字段age的值
    23     
    24     return 0;
    25 }

      上面的代码中,xiaoming.age实际上是调用了一个函数[xiaoming setAge];而下面将xiaoming.age打印出来则是调用了[xiaoming age];所以问题的实质就是在使用点语法为一个字段赋值或者调取一个字段的时候,系统会自动调用这个字段对应的setter和getter函数,这个字段对应的setter 和getter 函数是这样的,假如咱们的字段名为age,则对应的getter 和 setter函数的形式为:

                  -(int)setAge:(int)Newage;

                  -(int)age;

    除了我们自己声明和实现setter 或者getter函数,我们也可以以让编译器来为我们实现这两个函数,来看代码

     1 @interface  Person:NSObject{
     2 @private
     3     int age;
     4 }
     5 @property int age;                //编译器自动声明age对应的getter 函数和setter 函数
     6 @end
     7 
     8 @implementation Person
     9 @synthesize age;                  //编译器自动实现age对应的getter 和setter 函数
    10 @end
    11 int main(int argc, const char * argv[]) {
    12     Person * xiaoming = [Person alloc];
    13 
    14     xiaoming.age = 21;
    15 
    16    NSLog(@"%d",xiaoming.age);
    17     
    18     return 0;
    19 }

      在这段代码的第五行的语句就告诉编译器,你给我声明age对应的getter 函数和setter 函数,第九行的语句就告诉编译器你给我实现age对应的getter 和setter 函数,这样我们就不必自己去写字段对应的setter 和getter函数,当然了,你也可以自己在下面重新复写setter 或者getter 函数,添加你想添加的内容。

    备注:欢迎大家指出博客中存在的不足或者错误,我的QQ号码是993371649.

  • 相关阅读:
    .net core读取appsettings.config中文乱码问题
    vs2017错误:当前页面的脚本发生错误
    VS Code中无法识别npm命令
    Visual Studio报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字
    记录一次在生成数据库服务器上出现The timeout period elapsed prior to completion of the operation or the server is not responding.和Exception has been thrown by the target of an invocation的解决办法
    Java集合框架
    java hash表
    Java Dictionary 类存储键值
    java数据结构 栈stack
    java封装
  • 原文地址:https://www.cnblogs.com/ITLiu/p/4545865.html
Copyright © 2011-2022 走看看