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方法无限循环下去也是醉了。。。
3--OC -- 点语法的更多相关文章
- 【OC基础语法考试】
OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...
- OC点语法和变量作用域
OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...
- 李洪强iOS开发之OC点语法和变量作用域
OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...
- [Objective-c 基础 - 2.2] OC弱语法、类方法
A.OC弱语法 1.在运行的时候才会检查方法的声明和实现 2.没有声明只有实现的方法也能正常运行,只要在调用之前定义即可 3.类的声明必须存在,否则会出现运行时错误 B.类方法 1.是类名调用的方 ...
- 【Objective-C】1.oc点语法
在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法".比如: 1.在Student类的第2行定义了一个公共的成员变量a ...
- IOS基础之 (一) OC基础语法
一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数
1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...
- OC - 4.OC核心语法
一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成se ...
- iOS开发——OC篇&OC高级语法
iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
随机推荐
- 2016NEFU集训第n+5场 A - Chinese Girls' Amusement
Description You must have heard that the Chinese culture is quite different from that of Europ ...
- AJAx 刷新页面
<html><head> <meta http-equiv="Content-Type" content="text/html; chars ...
- pt-heartbeat监控延时
测试国内主机到国外主机mysql的延时 主机 perl /usr/bin/pt-heartbeat -uroot --ask-pass -D uk --create-table --update ...
- dom小总结
DOM是W3C的标准,分为3个不同的部分: 核心DOM:针对任何结构化文档的标准模型,XML DOM:针对XML文档的标准模型,HTML DOM:针对HTML文档的标准模型. HTML DOM中所有事 ...
- C/C++宏定义中#与##区别 .
// #表示:对应变量字符串化// ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符 #define U_BOOT_CMD_MKENT_COMPLETE(name,maxa ...
- java 图形界面 mvc模式控制
使用模型-视图-控件结构来开发GUI程序. 下面的程序演示了MVC模式开发的java程序. 其中CircleModel为模型,包含了圆的半径,是否填充,等属性. CircleView为视图,显示这个圆 ...
- 《Windows驱动开发技术详解》之驱动程序的同步处理
中断请求级 中断请求被分为软件中断和硬件中断两种,这些中断都映射成不同级别的中断请求级.每个中断请求都有各自的优先级别,正在运行的线程随时都可以被中断打断,进入到中断处理程序.优先级高的中断来临时,处 ...
- 如何让linux时间与internet时间同步(centos)
笔者在使用linux时(虚拟机),经常会发现使用一段时间后,linux时间和我的宿主机(真实机)的时间不一致,而宿主机的时间确实是internet时间,安装linux时选择的时区也是Asia/Shan ...
- 开机启动 sh
我编辑 /etc/init.d/vsftpd 将 nohup java -jar fff.jar & 放在前面 .就执行了
- 模拟摇奖:从1-36中随机抽出8个不重复的数字(math)
public class Yaojiang { public static void main(String[] args) { // TODO 自动生成的方法存根 int[] a=new int[8 ...