Bulmacayı tamamlamaya çalışıyorum.
__strongNSObject, NSString, vb. gibi tüm Objective-C tutulabilir nesne işaretçileri için varsayılandır. Güçlü bir referanstır. ARC -release, kapsamın sonunda onu bir ile dengeler .
__unsafe_unretainedeski yönteme eşittir. Tutulabilir nesneyi korumadan zayıf bir işaretçi için kullanılır.
__weakBu, __unsafe_unretainedotomatik olarak sıfırlanan zayıf bir referans olması, yani başvurulan nesnenin serbest bırakılmasının hemen ardından işaretçinin sıfıra ayarlanacağı anlamına gelmesidir. Bu, sarkan işaretçiler ve EXC_BAD_ACCESS hataları tehlikesini ortadan kaldırır.
Ama tam olarak ne için __autoreleasingiyidir? Bu niteleyiciyi ne zaman kullanmam gerektiğine dair pratik örnekler bulmakta zorlanıyorum. Bunun yalnızca aşağıdaki gibi bir işaretçi-işaretçi bekleyen işlevler ve yöntemler için olduğuna inanıyorum:
- (BOOL)save:(NSError**);
veya
NSError *error = nil;
[database save:&error];
ARC uyarınca şu şekilde beyan edilmelidir:
- (BOOL)save:(NSError* __autoreleasing *);
Ancak bu çok belirsiz ve nedenini tam olarak anlamak istiyorum . Bulduğum kod parçacıkları, bana tuhaf görünen __autor salıvermeyi iki yıldız arasına yerleştiriyor. Tür NSError**(NSError'a bir işaretçi), öyleyse neden __autoreleasingyıldızların arasına yerleştirip sadece önüne değil NSError**?
Ayrıca, güvenmem gereken başka durumlar da olabilir __autoreleasing.