2010-09-15 68 views
1

我在這裏有一些情況...
我正在向函數傳遞一個字符串,並且在該函數中我需要創建一個數組,其名稱是字符串。
例如:-(void) function : (NSString *) arrayName; //let arrayName = @"foo";
在這個函數中,我需要創建一個名爲「foo」的數組,即傳遞參數的值。
任何人都可以幫忙請:|
在此先感謝;)在objective-c中動態創建變量名稱

+0

爲什麼你需要有一個NSArray變量有一個特定的名字? – 2010-09-15 05:52:03

回答

2

這在Objective-C中是不可能的,但您可以使用例如將字符串映射到數組的字典。

E.g.假設像以下屬性:

@property (readonly, retain) NSMutableDictionary *arrays; 

...你可以按名稱存儲陣列:

- (void)function:(NSString *)arrayName { 
    NSArray *array = [NSArray arrayWithObjects:@"foo", @"bar", nil]; 
    [self.arrays setObject:array forKey:arrayName]; 
} 

...和訪問它像這樣:

NSArray *array = [self.arrays objectForKey:arrayName]; 
2

陣列唐沒有名字。變量具有名稱,但變量侷限於其範圍,因此一旦離開該方法的範圍,使變量名稱爲「foo」是毫無意義的;你可以將變量命名爲任何你想要的,它會工作得很好。例如:

- (void) function:(id)whatever { 
    NSArray * myVariable = [NSArray arrayWithStuff....]; 
    //use myVariable 
} 

你究竟想要做什麼?

+0

嘿感謝您的意見... :)其實這個功能本質上是遞歸的;所以每次我遍歷它,我想能夠創建一個新的數組,而不會丟失前一個... – Bangdel 2010-09-15 06:16:15

+1

@Bangdel如果方法是遞歸的,那麼對象仍然存在於它創建的框架/範圍中。一旦你退出遞歸調用,對象將仍然在那裏。 – 2010-09-15 06:46:03

0

C是一種編譯的語言,其中任何源代碼名稱(對於變量,函數等)在運行時都不可用(除了可能可選的調試,-g)。 Objective C運行時增加了按名稱查找Obj C方法和類的能力,但不能添加對象,也不能添加任何C東西。所以,除非你建立自己的迷你語言解釋器結構以供參考。很多方法可以做到這一點,但簡單的語言通常會構建某種類型的變量表,如字典,數組或對象鏈接列表(結構體,元組等等),其中包含字符串名稱,對象指針(也可能是類型,大小等)。