关于OC中方法返回类类型变量的疑惑

zxvivian 2015-10-26 01:17:36
//比如有个类ClassA
@interface ClassA : NSObject
//有两个属性
@property int a,b;
//有一个方法
-(ClassA *) add : (ClassA *) f;
-----------------类的实现---------------------
@implementation ClassA
@synthesize a,b;
-(ClassA *) add: (ClassA *) f
{
ClassA *result = [[ClassA alloc]init];
result.a = a + f.a;
result.b = b + f.b;
return result;
}
---------------------main.m----------------------
int main(int ac,char *av[])
{
@autoreleasepool
{
ClassA *func;
ClassA *c1 = [ClassA new];
ClassB *c2 = [ClassA new];
func = [c1 add: c2];
return 0;
}
}
我有两个疑惑的地方:
1.在这个程序里,add方法中定义了一个ClassA类的对象,然后对其进行赋值操作,最后返回这个对象。
在main中定义了c1,c2这2个对象,c1发消息给add方法,入参是c2,我疑惑的是这样的结果是func对象
确实把c1和c2的值进行的累加,这个方法不是在内部定义了一个新的对象吗,那么这个方法中的对象的初始值
应该是result.a=0,result.b=0,那么不管C1的值是多少,add方法返回的值都应该是入参c2的值。结果却不是这样。


2.在c语言中有一句话,一定不要在函数中返回一个局部变量的值。然而通过oc的定义得知,所有定义的对象都
储存在堆中,那么就说明result这个对象的生命周期不会因为调用方法结束而销毁, 我这样理解是对的吗
...全文
144 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧