2009-11-13 60 views
1

下面的代碼是一個簡單的c#函數,返回一個int數組。 我想知道如何將它轉換成Objective-C的詢問有關Objective-C的int數組的問題

private int[] test() 
{ 
    int[] a = new int[2]; 
    a[0] = 1; 
    a[1] = 2; 
    return a; 
} 

回答

5

下面的代碼應工作:

- (NSArray *)test { 
    NSArray *a = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], nil]; 
    return a; 
} 

注意,如果我們使用[[NSArray alloc] initWithObjects:blah, blah, nil];創建的NSArray,我們不得不明確autorelease,以避免內存泄漏返回之前的數組。然而,在這種情況下,NSArray是使用便捷的構造函數創建的,所以數組已經爲autoreleased。

第二個問題:

嘗試這種情況:

- (NSMutableArray *)test:(int)count { 
    NSMutableArray *a = [[NSMutableArray alloc] init]; 
    for (int i = 0; i < count; i++) { 
     [a insertObject:[NSNumber numberWithInt:0] atIndex:i]; 
    } 
    return [a autorelease]; 
} 
+0

非常感謝你。 – aon 2009-11-13 15:46:27

3

有點啞例如:

- (NSArray*) test{ 
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], nil]; 
} 

一些注意事項:

  • 的NSArray是不可變的類型 - 所以,如果你想添加/刪除值,你應該使用NSMutableArray而不是
  • 你可以只存儲在NSArray中的對象,所以你需要將它們包裝到NSNumber (或另一OBJ-C型)
  • 的OBJ-c是C的超集,所以你可以自由地與所用的c-陣列OBJ-C代碼,如果你想
1

有在Objective-C2種陣列的:標準C數組和可可NSArrays。 C arrays保持原始整數,但是由於C的限制必須保存對象,所以很麻煩,但是您可以在NSNumbers中包裝整數並在需要時返回int值。

NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:500], [NSNumber numberWithInt:12000], nil]; 
2

或替代路徑是使用普通的C代碼(在目標C是允許的):

int a[2]={1, 2}; 

或函數中:

int *somefunc(void){ 
    static int a[2]={1, 2}; 
    return b; 
}