Nesne ve Nesnel C tahsis init
Tahsis ve init için aşağıdaki 2 yolu bir nesne arasındaki fark nedir?
AController *tempAController = [[AController alloc] init];
self.aController = tempAController;
[tempAController release];
ve
self.aController= [[AController alloc] init];
Apple örneği çoğu, ilk yöntemini kullanın. Neden ayırmak, init ve nesne ve serbest hemen sonra miydin?
CEVAP
Her nesne bir başvuru sayısı vardır. 0, nesne gittiği zaman ayırmanın.
Özelliği @property (retain) olarak ilan edildi varsayarsak:
İlk örnek, satır satır:
- Nesne 1 bir başvuru sayısı vardır
alloctarafından oluşturulur. - Nesne teslim
selfsetAController:yöntem, hangi gönderirretainileti (çünkü bu yöntem bilmiyor nesne geliyor), artan başvuru sayısı 2. - Arama kodu artık
release1-başvuru sayısı azaltma çağırır nesnenin kendisi olmalıdır.
İkinci örnek, temel adımlar 1 ve nesnenin başvuru sayısı 2 sonunda 3, 2 değil.
Kural eğer bir nesne oluşturursanız, o bitince serbest için sorumlu olmasıdır. Sizin örnekte, kod özelliği ayarlar sonra tempAController ile yapılır. Ayrılmamak için nesne eğer ihtiyacı varsa retain aramak için ayarlayıcı yöntemi görevidir.
Önemli Objective-C self.property = foo; gerçekten [self setProperty:foo]; sadece steno ve setProperty: yöntem veya gerektiği gibi nesneleri kopyalama istinat olacağını hatırlamak önemlidir.
Eğer özelliği @property (copy), o zaman ilan edilirse nesne yerine kopyalanan muhafaza edilmiştir. İlk örnekte, orijinal nesnenin hemen serbest kalır; ikinci örnekte, orijinal nesnenin başvuru sayısı 0 olması gerektiği halde 1 olur. Hala kod aynı şekilde yazmak isterim.
Eğer özelliği @property (assign) self ilan edildi, nesnenin sahipliğini iddia değil, başkasının da onu korumak gerekir. Bu durumda, ilk örnek yanlış olur. Özellikleri Bu tür nadir, genellikle tek bir nesne delegeler için kullanılır.

Yeni yerine tahsis init kullanımı...
Nasıl bir nesne bir tarih olup olmadığ...
Nasıl bir öğeyi silmek veya bir dizi n...
Nasıl bir Kullanıcı Kimliği ASP.NET MV...
Eğer nesne Varlık Çerçevesi içinde olu...