Подтвердить что ты не робот

Инициализировать массив объектов с помощью NSArray

Я новичок в Objective-C и iOS, поэтому я играл с Picker View. Я определил класс Person, чтобы при создании нового 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

Теперь я хочу создать массив людей, чтобы я мог бросить кучу в сборщик, выбрать одного Человека и показать свой возраст. Сначала, хотя мне нужно создать массив Лиц. Как создать массив объектов, инициализировать и выделить их?

4b9b3361

Ответ 1

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

Ответ 2

Существует также краткое изложение этого:

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

Это эквивалентно

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

Как сказал iiFreeman, вам все равно нужно сделать правильное управление памятью, если вы не используете ARC.

Ответ 3

Никто не комментирует метод randomAge?

Это так ужасно неправильно, это не может быть хуже.

NSInteger является примитивным типом - он, скорее всего, typedef'd как int или long. В методе randomAge вычисляется число от 1 до 98.

Затем вы можете привести это число к NSNumber. Вы должны были добавить приведение, потому что компилятор дал вам предупреждение, которое вы не поняли. Это убрало предупреждение, но оставило вас с ужасной ошибкой: это число было вынуждено быть указателем, так что теперь у вас есть указатель на целое число где-то в первых 100 байтах памяти.

Если вы NSInteger к NSInteger через указатель, ваша программа потерпит крах. Если вы напишите через указатель, ваша программа потерпит крах. Если вы поместите его в массив или словарь, ваша программа потерпит крах.

Измените его либо на NSInteger или int, который, вероятно, является лучшим, либо на NSNumber если вам нужен объект по какой-то причине. Затем создайте объект, вызвав [NSNumber numberWithInteger: 99] или любой другой номер, который вы хотите.

Ответ 4

Это может на самом деле не ответить на вопрос, но на тот случай, если кому-то просто нужно быстро отправить строковое значение в функцию, для которой требуется параметр NSArray.

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

если вам нужно отправить более 1 строкового значения, вы также можете использовать

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

Затем вы можете отправить его в функцию, как показано ниже

theFunction(data);

Ответ 5

Таким образом, вы можете создать NSArray, NSMutableArray.

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

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