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