通过引用方法传递变量(Objective-C Iphone SDK)

发布于 2024-10-19 02:19:13 字数 580 浏览 3 评论 0原文

嗨:)这让我很困惑...

假设我有这个方法:

-(void) initEvent:(NSMutableArray*) Day day:(float)DayNum
{
   //[Day addObject:[[[LifeEvent alloc] init] initVars:100]];
   [Day addObject:@"Hello"];
   [Day addObject:@"there :)"];
}

我在一个小循环中调用该方法:

for (int i = 0; i < 7; i++)
   {
      NSMutableArray * DayTMP = [[NSMutableArray alloc] init];
      [self initEvent:DayTMP day:i];
   }

理论上,这应该将 DayTMP 传递给函数,并将数据添加到该变量。事实并非如此,相反,它创建 DayTMP 的副本,向该值添加数据,然后删除它。 DayTMP 永远不会被修改!

我需要知道如何将值作为指针而不是副本传递给函数,以便修改 DayTMP。

Hi :) This is messing me up quite the bit...

Say I have this method:

-(void) initEvent:(NSMutableArray*) Day day:(float)DayNum
{
   //[Day addObject:[[[LifeEvent alloc] init] initVars:100]];
   [Day addObject:@"Hello"];
   [Day addObject:@"there :)"];
}

I call that method in a small loop:

for (int i = 0; i < 7; i++)
   {
      NSMutableArray * DayTMP = [[NSMutableArray alloc] init];
      [self initEvent:DayTMP day:i];
   }

Theoretically, this should pass DayTMP to the function, and add data to that variable. Not the case, instead, it creates a copy of DayTMP, adds data to that value, and drops it. DayTMP never gets modified!

I need to know how to pass values to functions as pointers, not copies, so that DayTMP is modified.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

满地尘埃落定 2024-10-26 02:19:13

实际上,您在这里所做的是创建 7 个 NSMutableArray 类型对象,并且所有这些对象都使用相同的变量名 DayTMP ....... 因此,释放了所有 6 个对象的访问权限,并且您只能访问最后一个是因为在循环的每次迭代中 DayTMP 都指向新位置.......因此要实现您想要的目标,您应该执行以下操作...

  NSMutableArray * DayTMP = [[NSMutableArray alloc] init];
  for (int i = 0; i < 7; i++)
  {
      [self initEvent:DayTMP day:i];
  }

Actually what you are doing here is that you are creating 7 NSMutableArray type objects and the same variable name DayTMP is used for all of them ....... so loose the access of all 6 of them and and you only can access the last one because in every itteration of the loop DayTMP is pointing to new location ....... so to achieve what you want you should do following...

  NSMutableArray * DayTMP = [[NSMutableArray alloc] init];
  for (int i = 0; i < 7; i++)
  {
      [self initEvent:DayTMP day:i];
  }
我的影子我的梦 2024-10-26 02:19:13

通常,您的代码应该可以正常工作,除非您永远不会释放 DayTMP 从而导致内存泄漏。您确实正在传递一个指向 NSMutableArray 的指针:(NSMutableArray*)

Normally your code should work fine except that you never release DayTMP creating a memory leak. You are indeed passing a pointer to an NSMutableArray : (NSMutableArray*).

乖乖公主 2024-10-26 02:19:13

您在循环内“初始化”DayTMP!

这意味着您多次创建(并且从不释放!)同一个对象,每次都会覆盖它,因此您每次都会杀死旧对象,并且只得到最后一个对象:这是一个内存错误

You "init" DayTMP inside the loop!!!

that means you create (and never release!) the same object many time, overriding it every time, so you kill the old one each time, and you get just the last one: it's a memory error

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文