OC学习笔记(五)--对象与函数

原创 2016年05月30日 18:00:24
#import <Foundation/Foundation.h>  
  
@interface Person : NSObject  
{  
      float weight;  
      int age;  
}  
  
- (void) talk;  
       
@end  
  
@implementation Person  
- (void) talk  
{  
      NSLog(@"对方(年龄%d体重%f)不想跟你说话,并向你扔了一个Hello world。。",age,weight);
}
@end  

例一:

void test(int a,float w)
{
      a = 2;
      w = 8.0;
}

<pre name="code" class="objc">int main()
{
      Person *p = [Person new];
      p->age = 30;
      p->weight = 60.0;
      test(p->age,p->weight);
      [p talk];
      return 0;
}



运行结果:对方(年龄30体重60.0)不想跟你说话,并向你扔了一个Hello world。。

原因:由于test中值传递,改变的是a和w的值,并没有改变对象中的属性值;


例二:

void test1(Person *p)
{
      p->weight = 50.0;
}


int main()
{
      Person *p = [Person new];
      p->age = 30;
      p->weight = 60.0;
     // test(p->age,p->weight);
      test1(p);
      [p talk];
      return 0;
}

运行结果:对方(年龄30体重50.0)不想跟你说话,并向你扔了一个Hello world。。

原因:test1中参数p已经指向main中定义的p,所以修改有效;

例三:

void test2(Person *ps)
{
      Person *per = [Person new];
      per->age = 70;
      per->weight = 40.0;
      ps = per;
      ps->weight = 48.5;
}


int main()
{
      Person *p = [Person new];
      p->age = 30;
      p->weight = 60.0;
     // test(p->age,p->weight);
     // test1(p);
      test2(p);
      [p talk];
      return 0;
}

运行结果:对方(年龄30体重60.0)不想跟你说话,并向你扔了一个Hello world。。

原因:由于test2函数中指针ps已经指向了per的值,已经与main中的p对象无关,所以修改无效;

总结:只要搞清楚指针的指向,一切就容易了,指向谁就找谁;必要的时候可以自己在草稿纸上画一个内存指向图,一目了然;

另外,注意一个问题:在OC中,对象是不会自动回收的,需要手动释放,所以只要申请了一个对象,都会留在内存中,等着你释放,后续将会继续学习有关OC中内存管理的知识。


版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/eternity1118_。

相关文章推荐

oc学习笔记-复制对象

最近感觉oc很好玩,所以自己弄来玩玩。 其中部分资源及概念来源于各种书籍教程及互联网。 自学笔记仅记录自己操作及实践的过程并分享。 因本人水平有限,不保证内容的正确性。 如有错误或侵犯,实属意外,请联...
  • XinUni
  • XinUni
  • 2016年03月12日 15:46
  • 276

Objective-C学习笔记(四):OC之分类、类对象、description方法和SEL

一、Category 分类       1.分类的创建          1>首先按照学习笔记(一)中的方法创建一个新的命令行项目          2>new file新建一个文件         ...

黑马程序员—OC学习笔记—OOP中一个类包含另外一个类的对象

———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!———— 本节内容,OOP中一个类包含另外一个类的对象,其实就是学生拥有宠物狗,这句话的延伸实现...

oc学习笔记(四)面向对象-类的三大特性:封装,继承,多态

一、封装 成员变量的封装,或方法的封装 二、继承 三、多态

黑马程序员——OC学习笔记 类与对象的使用

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-OC学习笔记 类与对象的使用首先区分类和对象的区别。 类是一种抽象的数据类型,而对象是类的实例。这么说可能还是不...

OC学习笔记01-类的声明实现与对象创建,方法声明实现与调用及传参

#include //OC基本库Foundation主头文件 @interface Autobot :NSObject //声明的类继承NSObject类 { //member variable...

OC学习笔记二---面向对象

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、面向对象的理解     面向对象 Object Oriented,简称OO,面向对象的思想,...

OC学习笔记三---面向对象三大特性

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、封装 1.为什么要封装? 在前面的学习中,我们如果要访问成员变量,就直接在成员变量的声...

OC学习笔记之面向过程与面向对象

---------------------- http://www.itheima.com/" target="_blank">IOS开发、http://www.itheima.com/" targe...

黑马程序员-IOS学习笔记 OC 关于对象方法类方法的一些概念

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!------- 对象方法 (1)对象方法以-开头如 -(void)xx; (2)对象方法只能...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC学习笔记(五)--对象与函数
举报原因:
原因补充:

(最多只允许输入30个字)