对象和方法之间的关系
1.对象作为方法的参数
2.对象作为方法的返回值
1.对象作为方法的参数
对象作为方法参数传递是地址传递,因为对象是一个指针变量
在方法内部,可以通过对象形参,访问该对象的成员变量(如果该对象的该成员变量的访问权限是public的)
在方法内部,可以通过对象形参,调用该对象上的方法(给这个对象发送消息)
int main(intargc, const char * argv[])
{
// 1.创建士兵对象
Soldier *s1 = [Soldier new];
s1->_name = @"jack";
s1->_life = 10;
s1->_level = kSoldierLevel1;
// 2.创建枪对象
Gun *gun = [Gun new];
gun->_bulletCount = 100;
// 3.射击
[s1fireByGun:gun];
}
@implementation Soldier
- (void)fireByGun:(Gun *)gun
{
[gun shoot];
}
@end
2.对象作为方法的返回值
对象可以作为方法的返回值;
对象返回值的实质是返回指向该对象的指针,该对象是存储在堆内存中的。
由于堆内存是由程序员管理的,所以它不会因为函数结束而被销毁
@implementation Shop
- (Gun *)buyGun
{
Gun *gun = [Gun new];
gun->_bulletCount = 100;
return gun;
}
@end
多文件开发介绍
1.为什么要使用多文件
一个真正的iOS项目中可能会有成百上类,如果这些类都写在一个文件中,那么文件就会很大,想找到自己需要类都变的异常困难,开发效率低下
一个iOS项目可能会有多个人开发,如果多个人同时修改一个文件,那么就很可能会产生冲突,比如这个增加一个方法,那个人把这方法删掉了。另外就是当把多个人写功能合并起来的时候,也非常困难,写到一个文件中,无法顺畅的进行团队合作。
2.@interface和@implementation的形象比喻
@interface就好像暴露在外面的时钟表面
@implementation就好像隐藏在时钟内部的构造实现
3.在OC中如何进行多文件开发?
- 在工作中,通常把不同的类放到不同的文件中,每个类的声明和实现分开
声明写在.h头文件中,
实现写在相应的.m文件中去,
类名是什么,文件名就是什么。
假设有两个类,分别是Person类和Dog类,则通常有下面五个文件:
(1)Person.h Person类的声明文件
(2)Person.m Person类的实现文件
(3)Dog.h Dog类的声明文件
(4)Dog.m Dog类的实现文件
(5)Main.m主函数(程序入口) 在主函数以及类的实现文件中要使用#import包含相应的头文件。
4.多文件开发好处
显著提高团队协作的效率
提高程序的开发速度
提高程序的可维护性
提高代码的可读性
setter和getter方法
1.setter方法
作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值
命名规范:
必须是对象方法
返回值类型为void
方法名必须以set开头,而且后面跟上成员变量名去掉”_”首字母必须大写
必须提供一个参数,参数类型必须与所对应的成员变量的类型一致
形参名称和成员变量去掉下划线相同
- 举例:
如:如果成员变量为int _age 那么与之对应seter方法为
(void) setAge: (int) age;
setter方法的好处
不让数据暴露在外,保证了数据的安全性
对设置的数据进行过滤
---
2.getter方法
作用:为调用者返回对象内部的成员变量的值
命名规范:
必须是对象方法
必须有返回值,返回值的类型和成员变量的类型一致
方法名必须是成员变量去掉下划线
一定是没有参数的
- 举例
如:如果成员变量为int _age 那么与之对应geter方法为
- (int) age;
getter方法的优点:
可以让我们在使用getter方法获取数据之前,对数据进行加工;
比如国庆活动,我们希望对全线商品的价格在原来的价格基础上打五折,那么我们只要去改成品类的价格的getter方法就可以了,让他返回的值为价格 * 0.5
3.getter/setter方法注意
在实际的开发中,不一定set和get方法都会提 |
|