Может быть, это очевидно, но я не знаю, как объявить свойства класса в Objective-C.
Мне нужно кэшировать для каждого класса словарь и удивляться, как поместить его в класс.
objective-c
cocoa
oop
mamcx
источник
источник
.
Синтаксис -accessor не привязан к свойствам в Objective-C, это просто скомпилированный ярлык для любого метода , который возвращает то , что без принятия какого - либо арга. В этом случае я бы предпочел это - я лично предпочитаю.
синтаксис для любого использования, когда код клиента намеревается получить что-то, а не выполнить действие (даже если код реализации может создать что-то один раз или выполнить побочные действия) ..
Синтаксис интенсивного использования также приводит к более читабельному коду: присутствие[…]
s означает, что происходит что-то существенное, когда выборки используют.
вместо этого синтаксис.Я использую это решение:
И я нашел это чрезвычайно полезным в качестве замены шаблона Singleton.
Чтобы использовать его, просто получите доступ к своим данным с точечной нотацией:
источник
self
означает внутри метода класса?self
- это объект, который получил сообщение . И поскольку классы также являются объектами , в данном случае этоself
означаетModel
@synchronized
?Как видно из WWDC 2016 / XCode 8 ( что нового в сессии LLVM @ 5: 05). Свойства класса могут быть объявлены следующим образом
Обратите внимание, что свойства класса никогда не синтезируются
источник
static
переменная ( ) все равно должна быть объявлена и использована, а методы должны быть реализованы явно, как и прежде. Синтаксис точек уже работал и раньше. В целом, это звучит как нечто большее, чем на самом деле.Если вы ищете эквивалент класса
@property
, то ответ «такого нет». Но помните@property
, в любом случае это только синтаксический сахар; он просто создает методы объекта с соответствующим именем.Вы хотите создать методы класса, которые обращаются к статическим переменным, которые, как уже говорили другие, имеют только немного другой синтаксис.
источник
UIDevice.currentDevice.identifierForVendor
работает для меня.Вот потокобезопасный способ сделать это:
Эти изменения гарантируют, что fooDict создается только один раз.
Из документации Apple : «dispatch_once - выполняет объект блока один раз и только один раз за время существования приложения».
источник
Initializer element is not a compile-time constant
.Начиная с Xcode 8 Objective-C теперь поддерживает свойства класса:
Поскольку свойства класса никогда не синтезируются, вам нужно написать собственную реализацию.
Вы получаете доступ к свойствам класса, используя обычный синтаксис точки на имени класса:
источник
Свойства имеют значения только в объектах, а не в классах.
Если вам нужно что-то хранить для всех объектов класса, вы должны использовать глобальную переменную. Вы можете скрыть это, объявив это
static
в файле реализации.Вы также можете рассмотреть возможность использования определенных отношений между вашими объектами: вы приписываете роль мастера определенному объекту вашего класса и связываете другие объекты с этим мастером. Мастер будет содержать словарь как простое свойство. Я думаю о дереве, подобном тому, которое используется для иерархии представления в приложениях Какао.
Другой вариант - создать объект выделенного класса, который состоит из вашего словаря 'class' и набора всех объектов, связанных с этим словарем. Это что-то вроде
NSAutoreleasePool
какао.источник
Начиная с Xcode 8, вы можете использовать атрибут свойства класса в ответе Берби.
Однако в реализации вам необходимо определить и класс getter, и сеттер для свойства класса, используя статическую переменную вместо iVar.
Sample.h
Sample.m
источник
Если у вас много свойств уровня класса, то может быть в порядке одноэлементный шаблон. Что-то вроде этого:
И
Теперь получите доступ к своим свойствам на уровне класса, как это:
источник
dispatch_once
здесь.[Попробуйте это решение, это просто] Вы можете создать статическую переменную в классе Swift, а затем вызвать ее из любого класса Objective-C.
источник