Должен “к - много” отношений быть смоделированным как свойства?

В моем случае мне нужно было вручную удалить все ссылки на dll, которые начинались с System.IO.Compression , а затем добавить одну за другой нужные ( System.IO .Compression.FileSystem и т. Д.), Хотя я написал только одно выражение using

using System.IO.Compression;

. Надеюсь, это кому-нибудь поможет

7
задан Quinn Taylor 30 June 2009 в 19:19
поделиться

1 ответ

Да.

Однако есть один аспект, который все еще оставляет меня в недоумении: как правильно моделировать отношения со многими, особенно когда коллекция должна быть публично неизменной, но изменяемой в частном порядке….

Легко: объявите свойство как только для чтения в заголовке, затем повторно объявите его как readwrite, скопируйте в расширение класса в файле реализации.

] Я понимаю, как реализовать методы доступа KVC для отношений ко многим ( countOf , objectsIn AtIndex и т. Д.), И это маршрут I » Я до сих пор следил.

Есть и мутации. С ними вам не нужно использовать mutableArrayValueForKey: ; вместо этого вы можете напрямую использовать изменяющиеся методы доступа. Вы' Я по-прежнему буду получать уведомления KVO, потому что KVO обертывает эти методы в первый раз, когда что-то добавляет себя в качестве наблюдателя для свойства.

У меня есть список форматов селекторов средств доступа , включая изменяемые средства доступа, на моем blog.

Edit:

Даже когда я объявляю свойство to-many как readonly, как в приведенном выше примере, внешний код все еще может вызывать mutableArrayValueForKey: @ "transaction" для объекта модели и изменить коллекцию.

Это хорошая причина сделать привычкой использовать изменяющие методы доступа и избегать mutableArrayValueForKey: . Вы не будете отправлять сообщения о мутации извне класса, если получите предупреждение компилятора (нет такого [общедоступного] метода) каждый раз, когда попробуете его.

Несмотря на доступность mutableArrayValueForKey:

6
ответ дан 7 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

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