: Her özellik kullanmak gerektiğinde birisi detaylı bir şekilde açıklayabilir misin nonatomic
, copy
, strong
, weak
, ve bu yüzden, üzerinde bildirilen bir özelliği için ve her ne anlatmak? Bir çeşit örnek de harika olurdu. ARC kullanıyorum.
: Her özellik kullanmak gerektiğinde birisi detaylı bir şekilde açıklayabilir misin nonatomic
, copy
, strong
, weak
, ve bu yüzden, üzerinde bildirilen bir özelliği için ve her ne anlatmak? Bir çeşit örnek de harika olurdu. ARC kullanıyorum.
Yanıtlar:
Bu cevabın çok sayıda hatası var ve aynı zamanda modası geçmiş. Lütfen diğer sorulara / cevaplara ve yorumlara bakınız.
nonatomic
nonatomic
çoklu diş açma amaçları için kullanılır. Beyan sırasında atomik olmayan bir öznitelik belirlediysek, o nesneye erişmek isteyen diğer herhangi bir iş parçacığı ona erişebilir ve çoklu iş parçacığıyla ilgili sonuçlar verebilir.
kopya
copy
nesne değiştirilebilir olduğunda gereklidir. Nesnenin değerine şu anda olduğu gibi ihtiyacınız varsa ve bu değerin nesnenin diğer sahipleri tarafından yapılan değişiklikleri yansıtmasını istemiyorsanız bunu kullanın. Kopyayı sakladığınız için nesneyi işiniz bittiğinde serbest bırakmanız gerekir.
Atamak
Assign
biraz tersidir copy
. Bir assign
mülkün alıcısını çağırırken, gerçek verilere bir referans döndürür. Bu özelliği, ilkel tipte bir özellik (float, int, BOOL ...) olduğunda genellikle kullanırsınız.
tutmak
retain
öznitelik bir nesneye işaretçi olduğunda gereklidir. Tarafından oluşturulan ayarlayıcı @synthesize
nesneyi alıkoyacaktır (diğer bir deyişle alıkoyma sayısı ekleyecektir). İşiniz bittiğinde nesneyi bırakmanız gerekir. Muhafaza işlevini kullanmak, saklama sayısını artıracak ve otomatik kiralama havuzunda belleği kaplayacaktır.
kuvvetli
strong
Objective-C Otomatik Referans Sayımının (ARC) bir parçası olarak retain niteliğinin yerine geçer. ARC olmayan kodda, sadece alıkonma ile eşanlamlıdır.
Bu, iOS 5 strong
ve weak
iOS 5 hakkında bilgi edinmek için iyi bir web sitesidir .
Http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1
Güçsüz
weak
, strong
referans sayısını 1 artırmayacağı dışındakine benzer . Bu nesnenin sahibi olmaz, ancak ona bir referans tutar. Nesnenin referans sayısı 0'a düşerse, yine de burada işaret ediyor olsanız bile, bellekten çıkarılacaktır.
Yukarıdaki bağlantı Zayıf ve Güçlü hakkında iyi bilgiler içermektedir .
nonatomic
bu gerektiği anlamına değil birden fazla ilmek aynı anda erişilebilir. Varsayılan, atomic
iş parçacığının güvenli olmasını sağlar.
nonatomic
özelliği, nesnenin iş parçacığı için güvenli olmadığını belirtir; bu, kötü şeyler olabileceğinden farklı bir iş parçacığı bu nesneye erişmeye çalışırsa, ancak atom özelliğinden çok daha hızlı olduğu anlamına gelir.
strong
ARC ile birlikte kullanılır ve bir nesnenin alıkonma sayısı konusunda endişelenmenize gerek kalmadan size yardımcı olur. ARC, işiniz bittiğinde sizin için otomatik olarak serbest bırakır.Anahtar kelimeyi kullanmak strong
, nesneye sahip olduğunuz anlamına gelir.
weak
sahiplik, ona sahip olmadığınız anlamına gelir ve ikinci nesneyi serbest bırakıldığı anda değer kaybedilene kadar, atandığı nesne kalıncaya kadar nesneyi izler. Örneğin. obj.a=objectB;
kullanılır ve zayıf bir özelliğe sahiptir, değeri yalnızca objectB bellekte kalana kadar geçerli olur.
copy
mülkiyet burada çok iyi açıklanmıştır
strong,weak,retain,copy,assign
birbirini dışlar, böylece onları tek bir nesnede kullanamazsınız ... "Beyan Edilen Özellikler" bölümünü okuyun
bunun size biraz yardımcı olacağını umarak ...
nonatomic
yalnızca dışlama uygulanmadığı anlamına gelir. Bu, erişimin iş parçacığı için güvenli olmadığı anlamına gelmez. Bu, atomic
vs'nin nonatomic
yakalamadığı bir uygulama detayıdır .
Bu bağlantının kopması var
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling.property
atamak __unsafe_untainedtained sahipliği ima eder.
kopya, __strong sahipliğinin yanı sıra kopya semantiğinin ayarlayıcıdaki olağan davranışını ifade eder.
korumak, güçlü sahiplik anlamına gelir.
güçlü, güçlü mülkiyeti ima eder.
güvensiz_unretained __unsafe_unretained sahipliğini ifade eder.
zayıf, __ zayıf sahiplik anlamına gelir.
Harika cevaplar! Daha derine açıklamak istiyorum bir şey olduğunu nonatomic
/ atomic
. Kullanıcı bu özelliğin - "atomisite" nin içeriğine değil, özniteliğin referansına yayıldığını anlamalıdır. Yani atomic
, işaretçiyi ve yalnızca işaretçiye özelliğin okunması / ayarlanması için kullanıcının atomikliğini garanti eder. Örneğin:
@interface MyClass: NSObject
@property (atomic, strong) NSDictionary *dict;
...
Bu durumda, göstericinin dict
farklı iplikler tarafından atomik şekilde okunacağı / ayarlanacağı garanti edilir . AMA dict
kendisi ( dict
işaret eden sözlük ) hala iş parçacığı güvensizdir , yani sözlüğe yapılan tüm okuma / ekleme işlemleri yine de iş parçacığı güvensizdir.
İplik güvenli koleksiyona ihtiyacınız varsa, ya kötü mimariye (daha sık) VEYA gerçek gereksinime (daha nadir) sahip olursunuz. "Gerçek gereksinim" ise - ya iyi ve test edilmiş iplik güvenli toplama bileşeni bulmak YA DA kendi bir yazma deneme ve sıkıntılar için hazırlıklı olun. Daha sonra "kilitsiz", "beklemesiz" paradigmalara bakalım. İlk bakışta roket bilimi gibi görünüyor, ancak "olağan kilitleme" ile karşılaştırıldığında harika bir performans elde etmenize yardımcı olabilir.