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

#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中内存管理的知识。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值