Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ARC - Automatic Reference Counting

Avatar for linkov linkov
June 17, 2012

ARC - Automatic Reference Counting

Что это такое, как это работает, с чего начать, когда переходить на ARC

Avatar for linkov

linkov

June 17, 2012
Tweet

Other Decks in Programming

Transcript

  1. ARC • Что это такое? • Как это работает? •

    С чего начать? • Когда переходить на ARC?
  2. ЧТО ТАКОЕ ARC • LLVM 3.0 • синтезирует retain /

    release для NSObject • обеспечивает совместимость с non-ARC кодом • Runtime • zeroing weak pointers • runtime функции для оптимизации перформанса
  3. ЧТО ТАКОЕ ARC non-ARC project retain = object ownership ARC

    project указатель на объект = object ownership
  4. локальные переменные __strong по дефолту КАК РАБОТАЕТ ARC __strong =

    nil при объявлении ARC retain при назначении ARC release ARC autorelease при возвращении -(id)swapWithValue:(id)newValue { id __strong oldValue = self->value; self->value = newValue; return oldValue; }
  5. КАК РАБОТАЕТ ARC __strong -(id)swapWithValue:(id)newValue { objc_retain(newValue); id oldValue =

    nil; oldValue = objc_retain(self->value); objc_release(self->value); self->value = objc_retain(newValue); objc_release(newValue); return objc_autorelease(oldValue); } -(id)swapWithValue:(id)newValue { objc_retain(newValue); id oldValue; oldValue = self->value; self->value = newValue; return objc_autorelease(oldValue); } первый этап второй этап
  6. КАК РАБОТАЕТ ARC __weak = nil когда strong объект на

    который указывает __weak становится nil ARC retain при назначении ARC release ARC autorelease при возвращении ARC objc_storeWeak(&param,value) / objc_loadWeak(&value) -(id)setDelegate:(id)d { self->delegate = d; } -(id)delegate:(id)d { return self->delegate; } __weak id delegate;
  7. КАК РАБОТАЕТ ARC __weak -(id)setDelegate:(id)d { d = objc_retain(d); objc_storeWeak(&self->delegate,d);

    objc_release(d); } -(id)delegate:(id)d { id temp = objc_loadWeak(&self->delegate); return objc_autorelease(objc_retain(temp)); } -(id)setDelegate:(id)d { objc_storeWeak(&self->delegate,d); } -(id)delegate:(id)d { return objc_loadWeak(&self->delegate); } первый этап второй этап
  8. КАК РАБОТАЕТ ARC alloc, copy, new Если ваш метод начинается

    с alloc, init, new, copy, или mutableCopy, ARC делает вывод о том, что ваш объект имеет retain count 1 и этот retain должен быть сбалансирован release
  9. КАК РАБОТАЕТ ARC alloc, copy, new [something copyRightLabel]; ARC client

    ARC class retain release [something copyRightLabel]; ARC client non-ARC class release [something copyRightLabel]; non-ARC client ARC class retain
  10. КАК РАБОТАЕТ ARC alloc, copy, new [something copyrightLabel]; -(void) copyRightLabel

    NS_RETURNS_NOT_RETAINED -(void) makeNewLabel NS_RETURNS_RETAINED
  11. ПО СЛОВАМ APPLE 1.@autoreleasepool быстрее в 6 раз 2.NSOBject retain/release

    оптимизитрованны => быстрее в 2 раза 3.методы возвращающие autoreleased объекты не используют @autoreleasepool => работают быстрее в 20 раз IOS 5 +
  12. ЧТО ТАКОЕ ARC поддержка iOS 4 iOS 5 __unsafe_unretained __strong

    __autoreleasing __unsafe_unretained __strong __autoreleasing __weak
  13. КОГДА ПЕРЕХОДИТЬ НА ARC 1.вы не работаете активно с non-NSObject

    объектами (CF, CG, etc) 2.вы пишите в основном под iOS 5 +
  14. ИНФОРМАЦИЯ ТУТ 1.WWDC 2011 – Session 323 Introduction to Automatic

    Reference Counting 2.WWDC 2011 – Session 322 Objective-C Advancements in depth 3. http://clang.llvm.org/docs/ AutomaticReferenceCounting.html