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方法无限循环下去也是醉了。。。

最新文章

  1. java实现支付宝接口--文档..转载
  2. [转] Unity Mathf 数学运算(C#)
  3. php套件 wampserver 常见问题
  4. Block对象
  5. linux监控命令nc用法
  6. mysql oom之后的page 447 log sequence number 292344272 is in the future
  7. 木匠ing[索引]
  8. 暂时解决Sublime Text 2不支持input问题(转)
  9. python(6)-logging 日志模块
  10. ICMP and InetAddress.isReachable()
  11. 【转】 Homebrew – OSX下简单的包管理系统
  12. Sequence Assignments FRM-41830: List of Value contains no entries.
  13. C++例题2:汉诺塔问题
  14. Map转Bean小工具
  15. “java.lang.IllegalArgumentException: Failed to evaluate expression ‘ROLE_USER’”报错的解决
  16. Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)
  17. Javascript我学之四作用域
  18. jqGrid 中文配置 - grid.locale-cn.js 多国语言
  19. pandas绘图
  20. 一、I/O操作(中文问题)

热门文章

  1. NOIP2005-普及组复赛-第二题-校门外的树
  2. Unity3D 回合制 网上源码 目前还在研究构思
  3. 一把刀终极配置Win7/8版 v2.0 绿色版
  4. C - 哗啦啦村的扩建
  5. SpringMVc上传excel或csv文件
  6. mysql教程
  7. jquery的隐藏
  8. smartGit注意点
  9. mybatis---------insert,delete ,update的批量操作
  10. javaWeb知识的回顾