Цель C iOS позиционирование кода? - PullRequest
1 голос
/ 11 июля 2011

Я очень плохо знаком с Objective-C и в настоящее время изучаю, как использовать Xcode и создавать приложения для iOS.В настоящее время я тестирую приложение на основе навигации.В качестве части моего отображения мне нужно загрузить веб-данные, вырезать HTML-теги, отформатировать строку и т. Д., Что занимает довольно много кода.Я обнаружил, что когда этот код вставляется в файл реализации, он довольно медленный в симуляторе iPhone.
Это может показаться очень очевидным вопросом, но правильно ли я помещаю код в файл реализации View?или я должен создать отдельный файл для всей обработки данных, а затем передать результаты в файл представления?Еще раз, извините, если это тривиально, и любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 11 июля 2011

Вы не должны выполнять выборку данных в классе представления.Классы просмотра управляют отображением только данных.Начните с документа Core Competencies от Apple и перейдите по ссылкам на Шаблон проектирования контроллера представления модели .

В итоге вы хотите получить коллекцию классов Model, содержащихваши данные, независимо от того, как они отображаются.Вы хотите просмотреть классы, которые отображают ваши данные, независимо от того, как они собираются и рассчитываются.И вам нужны классы Controller, которые склеивают их вместе.

1 голос
/ 11 июля 2011

Привет и добро пожаловать в Stack Overflow! Технически, то, что вы делаете сейчас, хорошо. Однако общая стратегия эффективного кодирования называется Model-View-Controller, где вы разделяете компоненты, которые выполняют разные задачи. Для вашего примера, загрузка и обработка должны происходить в разделе модели, откуда берется контент. Контроллер просто отвечает за получение данных модели и передачу их в представление. Представление уже предоставлено как часть UINavigationViewController. Опять же, это не влияет на производительность, это просто стиль, облегчающий последующее обслуживание.

EDIT

В ответ на ваш второй вопрос вот что вы можете сделать (при условии, что у вас есть MyModel и MyController).

MyModel.h:

@interface MyModel : NSObject {
    NSMutableArray *_data;
}
@property (nonatomic, retain) NSMutableArray *data;
@end

MyModel.m:

@implementation MyModel

@synthesize data = _data;

- (id)init {
    if ((self = [super init])) {
        self.data = [[[NSArray alloc] init] autorelease];
        // do your processing here and add it to self.data
    }
    return self;
}

Затем в MyController.m инициализируйте экземпляр MyModel и обращайтесь к model.data всякий раз, когда вы захотите этот массив.

0 голосов
/ 11 июля 2011

Сложный вопрос, я думаю, вам лучше написать код в каком-либо объекте контроллера, а не в вашем объекте вида.Представление будет беспокоиться только об отображении информации, в то время как контроллер будет извлекать данные и передавать их представлению.И как показывают ваши тесты, попробуйте получить данные таким образом, чтобы при этом не блокировать ваше приложение.В этом случае вам следует прочитать Руководство по программированию Threading из документации Apple, в которой описана тема.

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