NSMutableArray填充了指针

时间:2010-06-07 12:53:15

标签: iphone pointers arrays nsmutablearray

我知道这个问题过去已经被问过,但我真的很困惑,无法摆脱它。

我有9个指向IB对象的指针,如:

  

IBOutlet UIButton * but1;

     

IBOutlet UIButton * but2;

     

...

     

NSMutableArray *按钮;

声明的属性:

  

@property(nonatomic,retain)IBOutlet UIButton * but1;

     

@property .....

在IB中,我已经建立了从按钮到指针的连接。

我现在需要用这些指针填充数组按钮来运行像

这样的UIButton方法
  

[[buttons objectWithId:0] setImage:[UIImage imageNamed:@“image1.png”]];

我知道我无法用指针填充数组,有没有办法让IBOutlets进入数组?

2 个答案:

答案 0 :(得分:1)

你不能用任意指针填充Cocoa容器,但指向类类型对象的指针 - 比如你的UIButton - 都没问题。
Cocoa容器保留并释放添加到它们的对象,因此指向非类类型的指针必须包含在例如NSValue

另请注意,IBOutlet不是类型,它是一个空宏,仅用于标记Interface Builder的代码部分。

答案 1 :(得分:0)

你过度思考问题。默认情况下,对所有对象的所有引用都是指针。

此:

IBOutlet UIButton *but1;

...定义一个指针。

因此,对象的所有默认操作都使用指针。你通常甚至不必考虑它。要将指向UIButton的指针添加到NSMutableArray,只需使用(注意self表示法):

[self.buttons addObject:self.but1];

IBOutlet指定对代码中的引用没有影响。它就在那里,所以Interface Builder可以解析源代码并找出应该注意哪些属性。否则,它什么都不做,你可以忽略它。

当然,我不得不问:为什么要将已命名属性的按钮放入数组?

而不是:

[[buttons objectWithId:0] setImage:[UIImage imageNamed:@"image1.png"]];

......为什么不这样做?

[self.but1 setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal]; 

如果不使用名称作为主要参考,则使用命名属性没有多大意义。