Bulmacayı tamamlamaya çalışıyorum.
__strong
NSObject, 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_unretained
eski yönteme eşittir. Tutulabilir nesneyi korumadan zayıf bir işaretçi için kullanılır.
__weak
Bu, __unsafe_unretained
otomatik 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 __autoreleasing
iyidir? 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 __autoreleasing
yıldızların arasına yerleştirip sadece önüne değil NSError**
?
Ayrıca, güvenmem gereken başka durumlar da olabilir __autoreleasing
.