使用NSArray初始化对象数组

我对Objective-C和iOS非常陌生,所以我一直在玩Picker View。 我定义了一个Person类,这样当你创build一个新的Person时,它会自动给这个人一个名字和年龄。

#import "Person.h" @implementation Person @synthesize personName, age; -(id)init { self = [super init]; if(self) { personName = [self randomName]; age = [self randomAge]; } return self; } -(NSString *) randomName { NSString* name; NSArray* nameArr = [NSArray arrayWithObjects: @"Jill Valentine", @"Peter Griffin", @"Meg Griffin", @"Jack Lolwut", @"Mike Roflcoptor", @"Cindy Woods", @"Jessica Windmill", @"Alexander The Great", @"Sarah Peterson", @"Scott Scottland", @"Geoff Fanta", @"Amanda Pope", @"Michael Meyers", @"Richard Biggus", @"Montey Python", @"Mike Wut", @"Fake Person", @"Chair", nil]; NSUInteger randomIndex = arc4random() % [nameArr count]; name = [nameArr objectAtIndex: randomIndex]; return name; } -(NSInteger *) randomAge { //lowerBound + arc4random() % (upperBound - lowerBound); NSInteger* num = (NSInteger*)(1 + arc4random() % (99 - 1)); return num; } @end 

现在我想创build一个人的arrays,所以我可以把一堆人放到select器中,挑选一个人并显示他们的年龄。 首先,尽pipe我需要制造一系列的人员。 如何创build一个对象数组,初始化和分配它们?

 NSMutableArray *persons = [NSMutableArray array]; for (int i = 0; i < myPersonsCount; i++) { [persons addObject:[[Person alloc] init]]; } NSArray *arrayOfPersons = [NSArray arrayWithArray:persons]; // if you want immutable array 

你也可以在不使用NSMutableArray的情况下达到这个目的:

 NSArray *persons = [NSArray array]; for (int i = 0; i < myPersonsCount; i++) { persons = [persons arrayByAddingObject:[[Person alloc] init]]; } 

还有一件事 – 对于支持ARC的环境是有效的,如果你打算在没有ARC的情况下使用它,不要忘记将自动释放的对象添加到数组中!

 [persons addObject:[[[Person alloc] init] autorelease]; 

这也是一个简写:

 NSArray *persons = @[person1, person2, person3]; 

这相当于

 NSArray *persons = [NSArray arrayWithObjects:person1, person2, person3, nil]; 

正如iiFreeman所说,如果你不使用ARC,你仍然需要做适当的内存pipe理。

没有人评论randomAge方法?

这是非常错误的,它不可能是任何人。

NSInteger是一个原始types – 它很可能是int或longtypes的。 在randomAge方法中,计算一个从1到98的数字。

然后你把这个数字转换成一个NSNumber *。 你必须添加一个演员,因为编译器给你一个警告,你不明白。 这使得警告消失了,但留下了一个可怕的错误:这个数字被迫成为一个指针,所以现在你有一个指向前100个字节的内存中的整数的指针。

如果您通过指针访问NSInteger,您的程序将崩溃。 如果通过指针写入,程序将崩溃。 如果你把它放到一个数组或字典中,你的程序将会崩溃。

将其更改为NSInteger或int(可能是最好的),或者如果您因为某种原因需要某个对象,则将其更改为NSNumber。 然后通过调用[NSNumber numberWithInteger:99]或任何你想要的数字来创build对象。

如何创buildNSArray,NSMutableArray ….?

 NSArray keys =[NSArray arrayWithObjects:@"key1",@"key2",@"key3",nil]; NSArray objects =[NSArray arrayWithObjects:@"value1",@"value2",@"value3",nil];