在运行时创建实例变量?

问题描述:

嘿,我这里有点困惑..在运行时创建实例变量?

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

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

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

for (ETPlaylist *aPlaylist in allPlaylists){ 

    arrayContainingTracks = [aPlaylist tracks] 

} 

所以

  1. 我要如何在每个枚举“arrayContainingTracks”设置不同的名字?
    如何在头文件中做到这一点,其中所有的实例变量都必须声明?

  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方法。

+0

谢谢!我的意思是不改变名字。我想到:在第一枚枚举:arrayContainingFirstPlaylistTracks = [FirstPlaylist曲目] >>在第二枚枚举:arrayContainingSecondPlaylistTracks = [SecondPlaylist曲目]等等。我知道这可能有点不可思议;) – bijan 2010-11-05 02:12:49

+0

因此,在你的第一个代码片段中,数组将包含没有任何信息的所有曲目,它们属于哪个播放列表? – bijan 2010-11-05 02:18:53

+0

@bijan是的,第一个代码片段只保存曲目。 – 2010-11-08 03:59:04