Используйте тип suckEffect на анимации. Также: spewEffect, genieEffect, unGenieEffect, скручивание, tubey, скручивание, cameraIris, cameraIrisHollowClose, cameraIrisHollowOpen, rippleEffect, charminUltra, zoomyIn, и zoomyOut. Не работает в средстве моделирования.
CATransition *animation = [CATransition animation];
animation.type = @"suckEffect";
animation.duration = 2.0f;
animation.timingFunction = UIViewAnimationCurveEaseInOut;
view.opacity = 1.0f;
[view.layer addAnimation:animation forKey:@"transitionViewAnimation"];
Примечание: Фрагмент кода вытянули от большей кодовой базы. Я надеюсь, что это работает:)
Возможно, вас заинтересует встроенный декоратор django django.utils.functional.memoize
.
Django использует это для кэширования дорогостоящих операций, таких как разрешение URL.
Обычно я использую такой шаблон:
def get_expensive_operation(self):
if not hasattr(self, '_expensive_operation'):
self._expensive_operation = self.expensive_operation()
return self._expensive_operation
Затем вы используете метод get_exurities_operation
для доступа данные.
Однако в вашем конкретном случае Я думаю, что вы подходите к этому немного неправильно. Вам нужно выполнить десериализацию при первой загрузке модели из базы данных и сериализовать только при сохранении. Затем вы можете каждый раз просто обращаться к атрибутам как к стандартному словарю Python. Вы можете сделать это, определив собственный тип JSONField, создав подкласс models.TextField, который переопределяет to_python
и get_db_prep_save
.
Фактически кто-то уже сделал это: см. здесь .