iOS对象数组:在函数内创建对象数组

时间:2011-05-17 14:31:07

标签: iphone arrays ios object

我有一个“Note”课程,我有一个Tuner课程。我的Tuner类正在初始化它的init函数中的NSArray*

我想初始化这个数组以保存88个音符,现在我正在创建像Note * key1;等等。

我只是确保我需要为这些笔记分配内容,以便在初始化完成后它们不会超出范围,并且NSArray与其条目保持一致,或者我能够声明注意key1并插入到数组中,它将由我处理。 创建包含一些对象的NSArray的一段示例代码,即使在函数退出后数组也会保持不变,这将非常有用。谢谢!

4 个答案:

答案 0 :(得分:2)

以下是一个简单的示例,说明如何在Tuner类的初始化函数中执行此操作

for ( int i = 0; i < 88; ++i )
{
    Note *key = [[Note alloc] init];
    [myNotes addObject:key];
    [key release];
}

请注意,在我的示例中,假设myNotes属于NSMutableArray类型。这是通过单独添加对象来构造数组的唯一方法。

答案 1 :(得分:2)

NSArrayNSMutableArray在添加对象时将-retain发送给对象,因此适当的做法是-release显式添加的对象或使用自动释放的对象。

以下是Tuner班级-init方法的简单示例:

- ( id )init
{
    NSInteger    i;
    Note         *note;

    self = [ super init ];
    if ( self ) {
        notes = [[ NSMutableArray alloc ] initWithCapacity: 88 ];
        for ( i = 0; i < 88; i++ ) {
            note = [[ Note alloc ] initWithKey: i ];
            [ notes addObject: note ];
            [ note release ];
        }
    }

    return( self );
}

您需要+alloc每个Note对象和-release,因为将其添加到数组会保留它。要在完成后销毁所有注释对象,请确保Tuner类以-dealloc方法释放数组:

- ( void )dealloc
{
    [ notes release ]; // this sends release to all objects in the array, too

    [ super dealloc ];
}

答案 2 :(得分:1)

在将保存notes数组的类中。

  1. 使用名为notes的NSMutableArray类型(非原子,保留)创建属性。
  2. 合成它。
  3. 确保以dealloc方法发布。
  4. 在创建数组的方法中:

    1. 初始化并分配一个新的临时NSMutableArray。
    2. 循环并将所有Note对象添加到数组中。
    3. 将此数组添加到笔记中。

答案 3 :(得分:0)

好吧,我不完全确定你要做什么,但你可以把NSMutableArray作为一个全局变量。然后,您可以向此数组添加和删除任何类型的任何对象。在您调用它的release方法之前,该数组仍将在内存中。