Iphone NSMutableArray+;添加UIImageView-非常简单但不起作用-arghh帮助

Iphone NSMutableArray+;添加UIImageView-非常简单但不起作用-arghh帮助,iphone,objective-c,uiimageview,nsmutablearray,Iphone,Objective C,Uiimageview,Nsmutablearray,我正在动态创建ImageView(一个小汉堡图标,仅供参考),并希望通过使用可变数组跟踪它们。我在标题中将数组声明为: NSMutableArray *myBurgers; 并在viewDidLoad中初始化我的数组 NSMutableArray* myBurgers = [NSMutableArray arrayWithCapacity:0]; 这是我制作图像并将其推入数组的方法-当前我的数组计数返回0-我的编译器错误为“Unused variable”myburgers -(void)b

我正在动态创建ImageView(一个小汉堡图标,仅供参考),并希望通过使用可变数组跟踪它们。我在标题中将数组声明为:

NSMutableArray *myBurgers;
并在viewDidLoad中初始化我的数组

NSMutableArray* myBurgers = [NSMutableArray arrayWithCapacity:0];
这是我制作图像并将其推入数组的方法-当前我的数组计数返回0-我的编译器错误为“Unused variable”myburgers

-(void)burgerManGo:(CGPoint)location {

   burgerCount=burgerCount++;

    if(location.x<=(320) && location.y<=(480)){

    CGRect myImageRect = CGRectMake(location.x, location.y, 65, 55); 
    UIImageView *myNewBurger = [[UIImageView alloc] initWithFrame:myImageRect]; 
    [myNewBurger setImage:[UIImage imageNamed:@"burgerMan.png"]];
    myNewBurger.opaque = YES; // explicitly opaque for performance 
    [self.view addSubview:myNewBurger];

    //but adding to my array doesn't seem to work...
    [myBurgers addObject: myNewBurger];

    //because this always come back as 0
    NSLog(@"Array Size: %ld", [myBurgers count]);       

    } 

}
-(空)芒果汉堡:(CGPoint)位置{
burgerCount=burgerCount++;

如果(location.x您正在
viewDidLoad
中创建一个新实例,而不是分配给接口成员。

您正在
viewDidLoad
中创建一个新实例,而不是分配给接口成员。

您不应该创建容量为0的数组!它会在您第一次添加某些内容时立即调整大小您只需调用
[NSMutableArray]
即可获得默认初始容量的数组

至于您的实际问题:根据您所写的,您正在viewdidLoad中声明一个名为myBurger的新变量。也就是说,在viewdidLoad中,您应该有:

self.myBurgers = [NSMutableArray array];
而不是:

NSMutableArray* myBurgers = [NSMutableArray arrayWithCapacity:0];

请注意,
self.myBurger=
将导致保留新数组(假设您将myBurgers属性定义为retain,而不是assign)——这正是您想要的。不要忘记
[myBurgers release]
dealloc
中,您不应该创建容量为0的数组!它会在您第一次添加内容时立即调整大小。您只需调用
[NSMutableArray array]
即可获得默认初始容量的数组

至于您的实际问题:根据您所写的,您正在viewdidLoad中声明一个名为myBurger的新变量。也就是说,在viewdidLoad中,您应该有:

self.myBurgers = [NSMutableArray array];
而不是:

NSMutableArray* myBurgers = [NSMutableArray arrayWithCapacity:0];
请注意,
self.myBurger=
将导致新数组被保留(假设您将myBurgers属性定义为retain而不是assign)——这是您想要的。请记住
[myBurgers release]
中的
[myBurgers release]

NSMutableArray* myBurgers = [NSMutableArray arrayWithCapacity:0];
是一个自动释放的对象

-(void)viewDidLoad {

 myBurgers = [[NSMutableArray alloc]initWithCapacity:kMaxBurgersQty];



}

-(void)dealloc {
   [myBurgers release];
   myBurgers = nil;
}

这将允许汉堡阵列在运行期间某个地方不会自动运行。

< P> >

NSMutableArray* myBurgers = [NSMutableArray arrayWithCapacity:0];
是一个自动释放的对象

-(void)viewDidLoad {

 myBurgers = [[NSMutableArray alloc]initWithCapacity:kMaxBurgersQty];



}

-(void)dealloc {
   [myBurgers release];
   myBurgers = nil;
}

这将允许汉堡数组在运行时的某个地方不会自动恢复。

< p>您必须保留在VIELDDILLATION中所做的数组:现在,您有一个自动删除的对象,并且在运行循环之后将消失。

做:


您必须保留在viewDidLoad:中生成的数组,现在您有了一个自动删除的对象,并且将在运行循环之后消失

做:


如果我理解正确,您的类将声明一个实例变量,如下所示:

NSMutableArray *myBurgers;
然后按如下方式覆盖
viewDidLoad

- (void)viewDidLoad
{
    // ...
    NSMutableArray *myBurgers = [NSMutableArray arrayWithCapacity:0];
    // ...
}
- (void)viewDidLoad
{
    // ...
    myBurgers = [[NSMutableArray alloc] init];
    // ...
}
如果是这种情况,则您的
viewDidLoad
方法将声明一个局部变量,
myBurgers
,该局部变量临时屏蔽具有相同名称的实例变量。然后,您将自动删除的数组分配给该局部变量。该数组在从
viewDidLoad
返回后不久被解除分配,但在任何情况下,它都不是一个局部变量指定给实例变量

要解决此问题,请按如下所示重写
viewDidLoad
方法:

- (void)viewDidLoad
{
    // ...
    NSMutableArray *myBurgers = [NSMutableArray arrayWithCapacity:0];
    // ...
}
- (void)viewDidLoad
{
    // ...
    myBurgers = [[NSMutableArray alloc] init];
    // ...
}

您分配给实例变量的对象没有点自动释放;而是使用
alloc
和相应的
init…
方法。此外,正如前面的海报所指出的,初始化容量为零的可变数组是毫无意义的。或者使用特定的非零容量(如果您事先知道数组将包含多少个元素),或者采用默认值。

如果我理解正确,您的类将声明一个实例变量,如下所示:

NSMutableArray *myBurgers;
然后按如下方式覆盖
viewDidLoad

- (void)viewDidLoad
{
    // ...
    NSMutableArray *myBurgers = [NSMutableArray arrayWithCapacity:0];
    // ...
}
- (void)viewDidLoad
{
    // ...
    myBurgers = [[NSMutableArray alloc] init];
    // ...
}
如果是这种情况,则您的
viewDidLoad
方法将声明一个局部变量,
myBurgers
,该局部变量临时屏蔽具有相同名称的实例变量。然后,您将自动删除的数组分配给该局部变量。该数组在从
viewDidLoad
返回后不久被解除分配,但在任何情况下,它都不是一个局部变量指定给实例变量

要解决此问题,请按如下所示重写
viewDidLoad
方法:

- (void)viewDidLoad
{
    // ...
    NSMutableArray *myBurgers = [NSMutableArray arrayWithCapacity:0];
    // ...
}
- (void)viewDidLoad
{
    // ...
    myBurgers = [[NSMutableArray alloc] init];
    // ...
}

您分配给实例变量的对象没有点自动释放;而是使用
alloc
和相应的
init…
方法。此外,正如前面的海报所指出的,初始化容量为零的可变数组是毫无意义的。或者使用特定的非零容量(如果您事先知道数组将包含多少个元素),否则采用默认值。

是的。将对象分配给保留属性会增加保留计数。实际上,arrayWithCapacity:可以。arrayWithCapacity:不设置最大容量,而是创建一个具有足够内存的数组,以便接受给定数量的项。将对象添加到使用arrayWithCapacity:0创建的数组中应该可以很好。当然,只使用[NSMutableArray]可能更好当然,arrayWithCapacity:0不会中断任何内容,但完全没有意义。是的,它会。分配给保留属性会增加保留计数。实际上,arrayWithCapacity:可以。arrayWithCapacity:不会设置最大容量,而是创建一个具有足够内存的数组,以便接受给定数量的项。将对象添加到使用arrayWithCapacity:0创建的数组应该可以正常工作。当然,只使用[NSMutableArray]可能更好当然,容量为0的arrayWithCapacity:0不会破坏任何东西,但完全没有意义。这是正确的答案,询问者需要做的就是保留数组。嗯,不,这不是正确的答案。你所成功做的只是泄漏数组;它仍然没有被分配给实例变量。我是