Iphone NSMutableArray+;添加UIImageView-非常简单但不起作用-arghh帮助
我正在动态创建ImageView(一个小汉堡图标,仅供参考),并希望通过使用可变数组跟踪它们。我在标题中将数组声明为: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
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不会破坏任何东西,但完全没有意义。这是正确的答案,询问者需要做的就是保留数组。嗯,不,这不是正确的答案。你所成功做的只是泄漏数组;它仍然没有被分配给实例变量。我是