2015-06-09 81 views
0

我即将制作iPhone应用程序。 我遇到了一个问题。这段代码错了吗?

NSArray *array2 = [NSArray alloc]; 
[array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 
NSMutableArray *arr3 = [NSArray ArrayWithObjects:@"e",@"f",@"g",nil]; 
NSUInteger uInt1 = [array2 count]; 
uInt1 = [arr3 count]; 
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithArray:array2]; 

NSLog(@"count : %d", [mutableArray count]); 

这段代码错了吗? 我想我对c语言很熟悉。 但很难与像 NS系列C-目标类来处理....

这是我第一次到iPhone编程..

+0

为什么你认为你的代码错了? – Jens

+0

你想做什么,为什么你认为它不正确? – iphonic

+1

你面临什么问题? – Gati

回答

0
NSArray *array2 = [NSArray alloc]; 
[array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 

你应该分配的initWithObjects:array2结果,通常你甚至不从init...

NSArray *array2 = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",nil]; 

分裂alloc或使用arrayWithObjects:方法:

NSArray *array2 = [NSArray arrayWithObjects:@"a",@"b",@"c",@"d",nil]; 

,或者使用文本语法

NSArray *array2 = @[@"a",@"b",@"c",@"d"]; 

NSMutableArray *arr3 = [NSArray ArrayWithObjects:@"e",@"f",@"g",nil]; 

不能不可变的阵列NSArray分配给可变的一个NSMutableArray,也ArrayWithObjects的情况是错误的。正确的是:

NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"e",@"f",@"g",nil]; 

没什么错在这里:

NSUInteger uInt1 = [array2 count]; 
uInt1 = [arr3 count]; 
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithArray:array2]; 

NSLog(@"count : %d", [mutableArray count]); 

%d不应与NSUInteger得到真正使用。你将在64位机器上得到编译器警告。

打印为对象,而不是数量:

NSLog(@"count : %@", @([mutableArray count])); 
+0

对不起,我应该写的是什么问题:(当调试时,array1,2和3都没有显示正确的结果。他们指出垃圾值..我现在不能检查,但我想明天我会从答复中找到答案: )thx这么多! – serendi21

1

取决于你正在尝试做的,但在语法上应该更多的东西是这样的:

NSArray *array1 = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",nil]; 
NSMutableArray * array2 = [NSMutableArray arrayWithObjects:@"e",@"f",@"g",nil]; 
NSUInteger count1 = [array1 count]; 
NSUInteger count2 = [array2 count]; 
NSMutableArray * array3 = [[NSMutableArray alloc] initWithArray:array2]; 

夫妇的注意事项:

  • 虽然你可以在技术上做一个分配,然后在两个单独的行上的NSObject的初始化,通常你w应该像上面的第1行一起完成它们。
  • 第二行使用一个类方法来实例化NSMutableArray。在通常情况下,这些类型的方法将执行alloc & init并返回一个对象。但是在(稍微)更高级的情况下,它们可能会返回零,这意味着无法创建对象。例如,你想实例化一个AVCaptureDevice,但其中一个不存在。
  • 你不能创建一个NSArray并将其分配给一个NSMutableArray,但你可以换个方式 - NSMutableArray是NSArray的一个子类。
+0

由于您对SA非常陌生,并且您给出了可接受的答案,因此+1 – Jasper

0

A. NSArray创作

NSArray *array2 = [NSArray alloc]; 
[array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 

这里是一个真正的错误:你必须尊重init…方法有返回值:

NSArray *array2 = [NSArray alloc]; 
array2 = [array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 

但正如sulthan提到的,你平时在一个声明中做。

但是,你可以忘掉我说什么,因为你可以做到想你想数组文本做更容易:

NSArray *array2 = @[@"a",@"b",@"c",@"d"]; 

B. NSMutableArray创作

NSMutableArray *arr3 = [NSArray ArrayWithObjects:@"e",@"f",@"g",nil]; 

有一个bug ,编译器应该警告你:你创建一个NSArray的实例并将它分配给对象引用NSMutableArray,什么是子类。选项:

NSMutableArray *arr3 = [NSMutableArray ArrayWithObjects:@"e",@"f",@"g",nil]; 

NSMutableArray *arr3 = [@"e",@"f",@"g" mutableCopy]; 

C.记录

NSLog(@"count : %d", [mutableArray count]); 

有一个bug,编译器应该警告你:-count返回NSUInteger类型的值。这可以是一个整数或一个长,取决于体系结构。由于铿锵格式字符串检查,%d是多头的错误占位符。通常的处理方式是:

NSLog(@"count : %ld", (long)[mutableArray count]);