博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective - C基础: 第一天 - 8.OC对象与函数
阅读量:5013 次
发布时间:2019-06-12

本文共 1460 字,大约阅读时间需要 4 分钟。

前面我们知道了怎么设计类, 以及怎么创建类, 那么这次我们来讲讲OC的对象与函数吧~~

下面我们来看一个例子~~

#import 
@interface Car : NSObject{ @public int wheels; int speed;}- (void)run;@end@implementation Car- (void)run{ NSLog(@"%d个轮子, 速度为%d/km车子跑起来了", wheels, speed);}@endvoid test(int w, int s){ w = 20; s = 200;}int main(){ Car *p = [Car new]; p->wheels = 8; p->speed = 250; [p run]; return 0;}

前面我们知道了, OC和C是可以混编的, 而且是完全兼容, 那么问题来了, 如果我改一下呢?

void test(Car *newC){    newC->wheels = 5;}int main(){    Car *p = [Car new];    p->wheels = 8;    p->speed = 250;        test1(p);        [p run];        return 0;}
那么它在内存的存储空间又是怎样呢?? 我们来看看示意图:

首先, 我们来分析一下:

1. 创建了Car类的一个对象, [Car new]并且用Car *p指向了它, 所以获得了这个对象的地址ffd0.

2. 给对象的wheels和speed赋值.

3. 创建一个test函数, 参数是Car *newC类型, 并且把p传入进去.

4. test函数里就获得了p的地址, 并且给wheels赋值.

所以输出的结果就是:

2015-01-13 22:22:47.565 a.out[7420:745547] 5个轮子, 速度为250/km车子跑起来了

那如果再改一些呢?

void test1(Car *newC){    Car *c2 = [Car new];    c2->wheels = 2;    c2->speed = 80;        newC = c2;    newC->wheels = 1;}int main(){    Car *p = [Car new];    p->wheels = 8;    p->speed = 250;        test(p->wheels, p->speed);        test1(p);        [p run];        return 0;}

下面我们来看看示意图:

解析一下:

1. 把p的地址传入到test函数里.

2. 在test函数里创建了一个新的对象.

3. 把新的内存对象地址给了newC, 也就是说p和里面的newC已经没有关系了, 所以改变了newC的wheels的值, p也不会改变.

所以输出的结果是:

2015-01-14 00:20:48.310 a.out[7671:783844] 8个轮子, 速度为250/km车子跑起来了

好了, 这次我们就讲到之类, 下次我们继续~~~

转载于:https://www.cnblogs.com/iOSCain/p/4282862.html

你可能感兴趣的文章
两个Html页面之间值得传递
查看>>
EasyUI datagrid 的多条件查询
查看>>
Mac升级bash到最新版本
查看>>
利用vagrant打包系统--制作自己的box
查看>>
美女与硬币问题
查看>>
计算几何算法概览 (转)
查看>>
Notepad++的ftp远程编辑功能
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>
第06天
查看>>
设计模式的征途—5.原型(Prototype)模式
查看>>
iOS10 app连接不上网络的问题
查看>>
结对开发之电梯调度最终稿(徐梦迪&刘博)
查看>>
simple java mail
查看>>
信息建模
查看>>
Mybatis 数据库物理分页插件 PageHelper
查看>>
虚函数、纯虚函数详解
查看>>
z-stack中数据的发送,广播、组播、点对点
查看>>
Practial Vim 学习笔记一
查看>>
.NET中使用js实现百度搜索下拉提示效果[不是局部刷新,呜呜。。]
查看>>