在运行时创建实例变量?

时间:2010-11-05 01:36:06

标签: objective-c cocoa runtime instance-variables objective-c-runtime

嘿,我在这里有点混乱..

我正在使用EyeTunes框架进行一些学习项目。这是一个iTunes控制器。

该框架为我提供了一系列目前存在于iTunes中的播放列表。 由于某些播放列表包含数千个曲目,我计划在“applicationDidFinishLaunching”方法中创建每个播放列表的曲目对象数组。 (并保留这些数组)
这样,当绑定系统应该显示播放列表的曲目列表时,它不必加载整个列表。到目前为止一切顺利......

现在,为我想要做的每个播放列表创建这些轨道数组:
(allPlaylists是一个包含所有iTunes播放列表的数组[ETPlaylist *];
ETPlaylist返回一个Tracks数组,其中包含“track方法”)

for (ETPlaylist *aPlaylist in allPlaylists){

    arrayContainingTracks = [aPlaylist tracks]

}

所以

  1. 如何在每个枚举中为“arrayContainingTracks”设置不同的名称?
    以及如何在头文件中执行此操作,其中必须声明所有实例Vars?

  2. 和BTW:数组在分配时将内容加载到内存的关系是什么级别?

1 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解这个问题(为什么你想改变变量名?)。但是下面的代码将插入arrayContainingTracks中每个播放列表的每个曲目(假设它是NSMutableArray的一个实例):

for (ETPlaylist *aPlaylist in allPlaylists)
{
    [arrayContainingTracks addObjectsFromArray:[aPlaylist tracks]];
}

请注意,所有轨道都将在阵列中展平。如果您想预先加载每个曲目但同时保留播放列表的名称,请将其存储在NSMutableDictionary中:

for (ETPlaylist *aPlaylist in allPlaylists)
{
    [playlistsByName setObject:[aPlaylist tracks] forKey:[aPlaylist name]];
}

在这里,我假设ETPlaylist类有一个name方法。