Вопрос о создании классов в Objective-C - PullRequest
0 голосов
/ 20 августа 2010

Я действительно новичок в цели C и хочу создать класс, который является NSArray для NSDictionary, а затем иметь метод, который захватывает случайные записи. Я знаю, как это сделать, но я не понимаю, как это сделать в классе. Я имею в виду, что я подумал, что вы могли бы поместить код, который объявил (или какова бы ни была правильная терминология) массив просто в середине файла реализации, а затем я бы написал метод под этим. Единственной переменной экземпляра, которая была у меня, был NSArray, который был в файле интерфейса, вместе с прототипом метода (или чем-то еще), и это были единственные вещи, которые были в файле интерфейса.

Я не смог понять проблему, поэтому я создал тестовый класс, который был таким же, но с массивом простых текстовых строк. Я использовал ту же логику здесь, и я уверен, что она совершенно отсталая, хотя я не знаю, каким образом.

Это интерфейс для класса тестирования:

#import <Foundation/Foundation.h>


@interface TestClass : NSObject {
    NSArray *TestArray;
}


@end

А это файл реализации

#import "TestClass.h"


@implementation TestClass{
    NSArray *TestArray;
}
TestArray = [[NSArray alloc] arrayWithObjects:@"stuff",@"things",@"example",@"stuffThings",nil];

@end

1 Ответ

0 голосов
/ 20 августа 2010

Вы действительно должны прочитать Введение Apple в Objective-C . Это объясняет синтаксис и структуру языка. Вы также должны прочитать Руководство по управлению памятью Objective-C , чтобы ваши программы не теряли память и не зависали.

Сказав это, вот, вероятно, то, что вы пытаетесь создать (я позволил себе сменить некоторые имена ваших переменных):

TestClass.h

#import <Foundation/Foundation.h>

@interface TestClass : NSObject {
  NSArray* strings_;
}

// Method declarations would go here
// example:
- (NSString*)randomElement;

@end

TestClass.m

#import "TestClass.h"
#import <stdlib.h>

// Notice how the implementation does NOT redefine the instance variables.
@implementation TestClass

// All code must be in a method definition.

// init is analogous to the default constructor in other languages
- (id)init {
  if (self = [super init]) {
    strings_ = [[NSArray alloc] initWithObjects:@"stuff", @"things", nil];
  }
  return self;
}

// dealloc is the destructor (note the call to super).
- (void)dealloc {
  [strings_ release];
  [super dealloc];
}

- (NSString*)randomElement {
  NSUInteger index = arc4random() % [strings_ count];
  return [strings_ objectAtIndex:index];
}

@end

Для генерации случайных чисел , просто использовать arc4random(), потому что не требует установки начального значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...