Почему я должен сделать изменяемую копию этого массива?

Apple обеспечила этот пример:

NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
    // Handle the error
}

Почему они называют mutableCopy здесь? Это, потому что они хотели иметь NSMutableArray, а не NSArray, для редактирования / изменяют его позже? Или есть ли другая причина?

5
задан openfrog 25 January 2010 в 16:02
поделиться

4 ответа

Информация о продукте. Это может помочь. На них были представлены продукты в поиске Google.

http://www.vertica.com/

http://www.paraccel.com/

http://www.asterdata.com/index.php

-121--779121-

NumPy и MATLAB используют лежащую в основе реализацию BLAS для стандартных операций линейной алгебры. Некоторое время оба использовали ATLAS , но в настоящее время MATLAB, очевидно, также поставляется с другими реализациями, такими как Math Kernel Library (MKL) Intel. Какой из них быстрее на сколько зависит от системы и как была скомпилирована реализация BLAS. Также можно скомпилировать NumPy с помощью MKL, и Enthought работает над поддержкой MKL для распространения Python (см. маршрутную карту ). Вот также недавняя интересная запись в блоге об этом.

С другой стороны, если вам нужны более специализированные операции или структуры данных, то Python и MATLAB предлагают вам различные способы оптимизации (например, Cython , PyCUDA ,...).

Edit: Я исправил этот ответ, чтобы учесть различные реализации BLAS. Я надеюсь, что сейчас это справедливое представление нынешней ситуации.

-121--1260258-

Ответ можно найти далее в статье , в которой приведен ваш пример:

Когда контроллер табличного представления загружает свое представление, он должен извлечь объекты Event и сохранить их в массиве событий, чтобы их можно было отобразить позже. Массив событий должен быть изменяемым, поскольку пользователь может добавлять и удалять события .

Блок кода в данном примере является частью многокомпонентного процесса извлечения управляемых объектов из постоянного хранилища. На следующем шаге процесса вызывается setEvityArray: , для которого требуется изменяемый массив.

6
ответ дан 13 December 2019 в 19:27
поделиться

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

0
ответ дан 13 December 2019 в 19:27
поделиться

Этот пример код, вероятно, поступает из «Базового учебника данных для iPhone» документов Apple. Если это так, причина, по которой они сделали MutableCopy, это им нужен Nsmutablearray к Иварю, который определяется как nsmutablearray.

Образец кода устанавливает MutableFetchResults к переменной экземпляра, как следует следующим образом.

[self setEventsArray:mutableFetchResults];
[mutableFetchResults release];
[request release];

Затем переменная экземпляра определяется следующим образом.

@interface RootViewController : UITableViewController <CLLocationManagerDelegate> {

    NSMutableArray *eventsArray;
    NSManagedObjectContext *managedObjectContext;

    CLLocationManager *locationManager;
    UIBarButtonItem *addButton;
}
2
ответ дан 13 December 2019 в 19:27
поделиться

Если я правильно помню, что используя [myObject copy] по умолчанию создается неизменяемая копия объекта, то если у вас есть NSMutableArray, то он становится NSArray.

Поскольку в этом примере вы хотите сохранить мутируемость и, следовательно, возможность манипулировать, массив, который вы вызываете [myObject mutableCopy];, чтобы гарантировать, что вы получите мутируемую копию объекта.

3
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: