zoukankan      html  css  js  c++  java
  • 3--OC -- 点语法

       3.OC -- 点语法

    1、方法名

    // 冒号也是属于方法名的一部分
    - (void)setAge:(int)age;                  // 方法名是 setAge:
    - (void)setAge;                           // 方法名是 setAge
    - (void)setAge:(int)age andNo:(int)no;    // 方法名是:setAge:andNo:
    

    2、点语法

    a)定义一个Person类,Person.h

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject {
        // 在大括号里的私有变量age
        int age;
    }
    
    // 声明私有变量age的set方法
    - (void)setAge:(int)newAge;
    
    // 声明私有变量age的get方法
    - (int)age;
    
    @end
    

    b)Person.m

    #import "Person.h"
    
    @implementation Person
    
    // 实现age的set方法
    - (void)setAge:(int)newAge {
        age = newAge;
    }
    
    // 实现age的get方法
    - (int)age {
        return age;
    }
    
    @end
    

    c)main.m

    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // 实例化一个person变量
            Person *person = [[Person alloc] init];
            // Person *person = [Person new];
    
            // 调用set方法
            // 相当于 [person setAge:20];
            person.age = 20;
    
            // 调用get方法
            // 相当于 int age = [person age];
            int age = person.age;
    
            NSLog(@"age = %i", age);
        }
        return 0;
    }
    

    d)发现了上面的 person.age 了没?,它既可以是get方法,也可以是set方法,这得看他在等号的哪边。如果是在等号左边,编译器会把它当做set方法。反之,则是get方法。不信,我们可以在set方法和get方法里打印一下,测试就知道了。

    Person.m

    // 实现age的set方法
    - (void)setAge:(int)newAge {
        NSLog("调用了Person类的set方法");
        age = newAge;
    }
    
    // 实现age的get方法
    - (int)age {
        NSLog("调用了Person类的get方法");
        return age;
    }
    

    e)person.age 看起来好像是像 java 代码里调用 age 变量一样,所以为了避免混淆,我建议大家把私有变量的名字前面都加个下划线

    Person.h

    @interface Person : NSObject {
        // 在大括号里的私有变量age
        int _age;
    }
    

    Person.m

    // 实现age的set方法
    - (void)setAge:(int)newAge {
        NSLog("调用了Person类的set方法");
        _age = newAge;
    }
    
    // 实现age的get方法
    - (int)age {
        NSLog("调用了Person类的get方法");
        return _age;
    }
    

    f)java代码里有这样子的set和get方法

    // 一个简单的set方法,前提是已有了一个age私有变量
    public void setAge(int age) {
        this.age = age;
    }
    
    // get方法
    public int getAge() {
        return this.age;
    }
    

    那 OC 可以这样写吗,OC 有个 self 跟 java 的 this 很类似:

    // 实现age的set方法
    - (void)setAge:(int)newAge {
        //_age = newAge;
        self.age = newAge;
    }
    
    // 实现age的get方法
    - (int)age {
        return self.age;
    }
    

    如果这样写就完蛋了!请记住不要这样写!

    1)get方法中的self.age代表什么,上面刚讲,在等号左边代表set方法,一直set方法无限循环下去了。。。

    2)set方法中的self.age也是一样,代表的是get方法,一直get方法无限循环下去也是醉了。。。

  • 相关阅读:
    regsvr32 错误解决方案
    cefsharp解决闪烁
    WPF使用cefsharp 下载地址
    Winform下CefSharp的引用、配置、实例与报错排除(源码)
    cefSharp在XP下使得程序崩溃记录
    mvc3在window 7 iis7下以及 xp iis 5.1下的部署 ,asp.net MVC3无法打开项目文件E:/我们的项目/Project/HeatingMIS.Web/HeatingMIS.Web.csproj”。此安装不支持该项目类型。
    顺序程序设计
    你对linux了解多少,Linux 系统结构详解!
    算术运算符和算术表达式(优先级,结合性等)
    离散化和面元划分(可以理解为划分段)
  • 原文地址:https://www.cnblogs.com/stephenmc/p/5169702.html
Copyright © 2011-2022 走看看