簡體   English   中英

使用NSArray初始化對象數組

[英]Initialize Array of Objects using NSArray

我是Objective-C和iOS的新手,所以我一直在玩Picker View。 我已經定義了一個Person Class,這樣當你創建一個新的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

現在我想制作一個人數組,這樣我就可以把一大堆扔進選擇器,挑選一個人並顯示他們的年齡。 首先,雖然我需要制作一個人數組。 如何創建對象數組,初始化和分配它們?

還有一個簡寫這樣做:

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

它相當於

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

正如iiFreeman所說,如果你不使用ARC,你仍需要進行適當的內存管理。

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];

沒有人評論randomAge方法?

這是非常錯誤的,它可能不是任何wronger。

NSInteger是一種原始類型 - 它很可能是intlong typedef。 randomAge方法中,您可以計算大約1到98之間的數字。

然后你可以將該數字轉換為NSNumber 你必須添加一個演員,因為編譯器給你一個你不明白的警告。 這讓警告消失了,但是給你留下了一個可怕的錯誤:這個數字被強制成一個指針,所以現在你有一個指向前100個字節內存中某個整數的指針。

如果通過指針訪問NSInteger ,程序將崩潰。 如果你通過指針寫,你的程序將崩潰。 如果將它放入數組或字典中,程序將崩潰。

將它更改為NSIntegerint ,這可能是最好的,如果由於某種原因需要對象, NSNumber改為NSNumber 然后通過調用[NSNumber numberWithInteger:99]或您想要的任何數字來創建對象。

這可能不會真正回答這個問題,但以防萬一有人只需要將字符串值快速發送到需要NSArray參數的函數。

NSArray *data = @[@"The String Value"];

如果你需要發送超過1個字符串值,你也可以使用

NSArray *data = @[@"The String Value", @"Second String", @"Third etc"];

然后你可以把它發送到如下的功能

theFunction(data);

這樣你就可以創建NSArray,NSMutableArray。

NSArray keys =[NSArray arrayWithObjects:@"key1",@"key2",@"key3",nil];

NSArray objects =[NSArray arrayWithObjects:@"value1",@"value2",@"value3",nil];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM