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

来源:互联网 发布:cctv软件下载 编辑:程序博客网 时间:2024/05/19 18:18
#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
原创粉丝点击