关闭

[置顶] OC学习笔记(五)--对象与函数

标签: OC对象函数
455人阅读 评论(0) 收藏 举报
分类:
#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
查看评论

OC对象与函数

OC对象与函数有着本质的区别: (1)方法的实现只能写在@implementation··@end中,对象方法的声明只能写在@interface···@end中间 (2)对象方法都以-号开头,类方法都以+号开头 (3)对象方法只能由...
  • juemei02
  • juemei02
  • 2014-08-18 12:54
  • 206

【Objective-C】02-OC对象作为参数传递给函数

OC对象可以作为函数参数传递给参数,以下简述对象参数在函数中的两种情况: 一、对象作为参数传递到函数中,在函数内部对此对象的参数会影响到外部传递进来的对象。 二、对象作为参数传递到函数中,在函数内部指向其它的对象后,再对此参数对象进行操作时,不影响外部传递进来的对象。 如下文中的例子,函数test1...
  • HONG321
  • HONG321
  • 2014-12-04 23:08
  • 2265

oc 指针和对象的区别

比如  UIImageView * imgv=[[UIImageView alloc]init]; 求各位大大帮忙分析一下 谁是指针 谁是对象 imgv是指针,指针指向的是对象。  [[UIImageView alloc]init]; 创建了一个对象...
  • pilqc2009
  • pilqc2009
  • 2016-01-17 09:23
  • 1425

CAN总线学习笔记

1.总线状态  总线有“显性”和“隐性”两个状态,“显性”对应逻辑“0”,“隐性”对应逻辑“1”。“显性”状态和“隐性”状态与为“显性”状态,所以两个节点同时分别发送“0”和“1”时,总线上呈现“0”。
  • coolibin
  • coolibin
  • 2014-05-30 09:47
  • 1740

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

函数参数的默认值基本用法function log(x, y = 'World') { console.log(x, y); }log('Hello') // Hello World log('Hello', 'China') // ...
  • SirM2z
  • SirM2z
  • 2016-06-01 17:17
  • 2171

OC学习篇之---对象的拷贝

在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来介绍一下OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014-12-14 18:02
  • 11637

OC中对象的初始化(便利初始化函数以及便利构造函数)

在OC中对象初始化的两种方法: 类名 *对象名 = [[类名 alloc] init]; 或者 类名 *对象名 = [类名 new]; 在创建对象时,先用alloc给对象分配存储空间,然后按照类中定义的实例变量的结构建立这块内存。alloc是继承于NSOjbect的类方法,alloc...
  • YZ_Gene
  • YZ_Gene
  • 2016-08-04 21:53
  • 430

类定义,创建/销毁OC对象

类定义 1 OC类分为2个文件,一个是
  • zhuhai__yizhi
  • zhuhai__yizhi
  • 2014-10-25 09:26
  • 642

cmake学习笔记(五)

在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西。但靠这些知识还是不能看懂PySide使用CMakeLists文件,接下来继续学习find_package的 con
  • dbzhang800
  • dbzhang800
  • 2011-04-22 12:05
  • 8171

OC 对象的内存存储细节(类方法及对象方法的调用细节)

OC 对象的内存存储细节(类方法及对象方法的调用细节)  定义一个类:person  属性:age heifht weight  行为:eat sleep walk  */ @interface Person : NSObject { ...
  • jing__jie
  • jing__jie
  • 2017-01-11 16:51
  • 550
    个人资料
    • 访问:294214次
    • 积分:4368
    • 等级:
    • 排名:第8193名
    • 原创:131篇
    • 转载:22篇
    • 译文:3篇
    • 评论:121条
    博客专栏
    git博客
    https://zhleternity.github.io/
    最新评论