Передать свойство только для чтения другому классу

#ios #objective-c #uiviewcontroller

#iOS #objective-c #uiviewcontroller

Вопрос:

В Objective C у меня есть ядро Data managedObjectContext, реализованное следующим образом:

 //MyViewController1.h

@interface MyViewController1 : UIViewController 
{
    NSManagedObjectContext *_managedObjectContext;
}
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

//MyViewController.m

@implementation MyViewController1

@synthesize managedObjectContext = _managedObjectContext;

- (NSManagedObjectContext *) managedObjectContext
{
...
}
  

(Да, я знаю, что мой код ужасно устарел, это старый проект).

Я хочу передать это managedObjectContext в качестве параметра другому UIViewController , чтобы он мог удерживать managedObjectContext . Как мне объявить свойство? В настоящее время в MyViewController2 , я объявил его так же, как в MyViewController1 :

 @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
  

Но когда я делаю self.managedObjectContext = managedObjectContextParameter это в конструкторе MyViewController2.m , компилятор не позволяет мне присваивать, потому что он доступен только для чтения.

Каков наилучший способ сделать это? Должен ли я просто сделать это без readonly или иметь какую-то слабую ссылку? Я теряюсь в таких вещах.

Комментарии:

1. Удаление readonly кажется очевидным выбором. Зачем вы его добавили, если вам нужно, чтобы свойство было доступно для записи?

2. @rmaddy Я полагаю, что это было из кода boiler plate от Apple давным-давно. Могу ли я сделать свойство доступным только для чтения в viewController1, а свойство, которому оно передается в ViewController2, доступным для чтения? Это работает с компилятором, но не уверен, имеет ли это смысл с точки зрения дизайна. Но да, в конечном итоге может просто не заставить их читать только так, как вы говорите.