ARC słaby ivar wydany przed zwróceniem - gdy budujesz do wydania, nie debuguj

Mam klasę, która tworzy obiekt leniwie i zapisuje go jako słabą własność. Inne klasy mogą żądać tego obiektu, ale muszą oczywiście mieć silne odniesienie do niego, aby obiekt nie został zwolniony:

// .h
@interface ObjectManager
@property(nonatomic, weak, readonly) NSObject *theObject;
@end

// .m
@interface ObjectManager ()
@property(nonatomic, weak, readwrite) NSObject *theObject;
@end

@implementation ObjectManager
- (NSObject *)theObject
{
    if (!_theObject) {
        _theObject = [[NSObject alloc] init];
        // Perform further setup of _theObject...
    }
    return _theObject;
}
@end

Gdy schemat jest ustawiony na Xcode na budowanie dla Debugowania, wszystko działa dobrze - obiekt może zadzwonićobjectManagerInstance.theObject i wracajtheObject.

Gdy schemat jest ustawiony na budowanie dla wersji,theObject zwracanil:

// Build for Debug:
NSObject *object = objectManagerInstance.theObject;
// object is now pointing to theObject.

// Build for Release:
NSObject *object = objectManagerInstance.theObject;
// object is now `nil`.

Domyślam się, że kompilator optymalizuje mój kod, widząc to_theObject nie jest dalej używany w samej metodzie akcesora, więc ustawiana jest słaba zmiennanil przed powrotem. Wydaje się, że musiałbym stworzyć silne odniesienie, zanim faktycznie zwrócę zmienną, co mogę zrobić tylko za pomocą bloku, ale byłoby bałagan i wolałbym tego unikać!

Czy jest jakiś rodzaj słowa kluczowego, którego mogę użyć z typem powrotu, aby powstrzymać ivar przed tak szybkim dodawaniem?

questionAnswers(2)

yourAnswerToTheQuestion