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

3--OC -- 点语法的更多相关文章

  1. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

  2. OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...

  3. 李洪强iOS开发之OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...

  4. [Objective-c 基础 - 2.2] OC弱语法、类方法

    A.OC弱语法 1.在运行的时候才会检查方法的声明和实现 2.没有声明只有实现的方法也能正常运行,只要在调用之前定义即可 3.类的声明必须存在,否则会出现运行时错误   B.类方法 1.是类名调用的方 ...

  5. 【Objective-C】1.oc点语法

    在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法".比如: 1.在Student类的第2行定义了一个公共的成员变量a ...

  6. IOS基础之 (一) OC基础语法

    一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...

  7. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  8. OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

    1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...

  9. OC - 4.OC核心语法

    一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成se ...

  10. iOS开发——OC篇&OC高级语法

    iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...

随机推荐

  1. Payoneer官网注册教程,免费申请美国银行账号

    在我搞网赚项目的过程中,碰到境外收款付款的问题,起初我用Paypal贝宝,手续费高得惊人!相信做电商外贸的朋友深有体会.幸而发现了Paypal替代产品Payoneer,注册简单,手续费低,还有中文网站 ...

  2. Chapter 14_3 非全局的环境

    关于“环境”的一大问题在于它是全局的,任何对它的修改都会影响程序的所有部分. 例如:若安装一个元表用于控制全局变量的访问,那么整个程序都必须遵循这个规范. 当使用某个库时,没有先声明就使用了全局变量, ...

  3. 简单学习JavaScript面向对象编程

    JavaScript是一种弱类型语言.有一种原型机制. 1.创建一个空对象:var bill = {}; 给这个对象添加属性和方法: bill.name = "Bill E Goat&quo ...

  4. 文字编码转换器 V1.0 免费绿色版

    软件名称: 文字编码转换器 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win7 / Vista / WinXP 软件大小: 920KB 图片预览: 软件简介: 文字编码转换器,能把普通文 ...

  5. mysql sql语句大全(转载)

      1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 ...

  6. CentOS中文件夹基本操作命令

    摘自:http://www.centoscn.com/CentOS/help/2013/1024/1967.html 文件(夹)查看类命令 ls--显示指定目录下内容 说明:ls 显示结果以不同的颜色 ...

  7. ural 1352. Mersenne Primes

    1352. Mersenne Primes Time limit: 1.0 secondMemory limit: 64 MB Definition. If the number 2N−1 is pr ...

  8. ural 1119. Metro(动态规划)

    1119. Metro Time limit: 0.5 second Memory limit: 64 MB Many of SKB Kontur programmers like to get to ...

  9. 从MySQL全库备份中恢复某个库和某张表【转】

    从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [root@mha2 backup]#mysqldump -uroot -p123456 --default-character-set=u ...

  10. nginx安装与应用

    一.nginx的安装与启动: 1.安装依赖库.nginx的一些模块需要依赖其他第三方库,通常有pcre库(perl compatible regular expression,perl兼容正则表达式, ...