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. 批量去除office超链接

    mac下: fn+shift+comman+F9 windows下:control+shift+F9

  2. ASP.NET中的Excel操作(OLEDB方式)

    一:OLEDB方式操作Excel的个人理解 就是把要操作的Excel当作一个数据库,所有对Excel的操作,就变成了对“数据库”的操作.那么这时就需要有一个数据库的连接字符串. 代码如下: connS ...

  3. linux下ClamAV使用

    第一步:Clamav下载http://www.clamav.net/downloads#yuminstall wget –y第二步:创建clamav用户和组groupaddclamav   (创建cl ...

  4. perl中的pack与unpack

    这个pack, unpack在 "perl语言编程" 有介绍 看起来很复杂 #把一个字符串转为十六进制格式 my $source = 'abcd'; unpack('H*', $s ...

  5. HDU 5805 NanoApe Loves Sequence

    处理出每个位置左边的最大值和右边的最大值.然后就可以o(1)计算去掉某位置的最大值了. #pragma comment(linker, "/STACK:1024000000,10240000 ...

  6. 在Activity之间传递数据—传递值对象

    传递有两种方式,一种是类继承自Serializable(Java方式,速度较慢),另一种是类继承自Parcelable(Android方式) 继承自Serializable的时候,实现比较简单,类只需 ...

  7. Cantor数表

    题目:现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 第一项是1/1,第二项是是1/2,第三项是2/1,第四项是3/1,第五项是2/2,… ...

  8. 读入一行字符给string类型

    小技巧 string ss: getline(cin,ss):

  9. DefaultHttpClient is deprecated 【Api 弃用]】

    最近在使用Apache的httpclient的时候,maven引用了最新版本4.3,发现Idea提示DefaultHttpClient等常用的类已经不推荐使用了,之前在使用4.2.3版本的时候,还没有 ...

  10. SQL Server 完美SPLIT函数

    -- SQL Server Split函数   -- Author:zc_0101    -- 说明:   -- 支持分割符多字节   -- 使用方法    -- Select * FROM DBO. ...