在运行时创建实例变量?
问题描述:
嘿,我这里有点困惑..在运行时创建实例变量?
我正在使用EyeTunes框架进行一些学习项目。它是一个iTunes控制器。
该框架给了我目前存在于iTunes中的一系列播放列表。 由于有些播放列表包含数千个音轨,因此我计划在“applicationDidFinishLaunching”方法中创建每个播放列表的音轨对象数组。 (并保留这些数组)
这样,当绑定系统应显示播放列表的曲目列表时,此时不必加载整个列表。这么好到目前为止..
现在,为了创建这些轨道阵列为每个播放列表我想要做:
(allPlaylists是包含所有iTunes播放列表[ETPlaylist *]的阵列;
一种ETPlaylist返回的数组与它的轨道的“轨道法”)
for (ETPlaylist *aPlaylist in allPlaylists){
arrayContainingTracks = [aPlaylist tracks]
}
所以
我要如何在每个枚举“arrayContainingTracks”设置不同的名字?
如何在头文件中做到这一点,其中所有的实例变量都必须声明?和顺便说一句:在分配时,数组将其内容加载到内存的最高级别是什么?
答
我不确定我完全理解这个问题(为什么你要改变变量名?)。但是,下面的代码将插入每个播放列表的每一个曲目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
方法。
谢谢!我的意思是不改变名字。我想到:在第一枚枚举:arrayContainingFirstPlaylistTracks = [FirstPlaylist曲目] >>在第二枚枚举:arrayContainingSecondPlaylistTracks = [SecondPlaylist曲目]等等。我知道这可能有点不可思议;) – bijan 2010-11-05 02:12:49
因此,在你的第一个代码片段中,数组将包含没有任何信息的所有曲目,它们属于哪个播放列表? – bijan 2010-11-05 02:18:53
@bijan是的,第一个代码片段只保存曲目。 – 2010-11-08 03:59:04