SORU
12 ŞUBAT 2010, Cuma


@özellik ve korumak, atama, kopyalama, Objective-C nonatomic

Objective-C biri bana bir bakış ver Yeni birini korumak gibi özlüyorum, @emlak yönergeyi takip kopyalayıp başka ata? Ne yapıyorlar ve neden başka bir yere bir kullanmak isteyeyim?

CEVAP
10 NİSAN 2013, ÇARŞAMBA


@Özelliğin özniteliklerini hakkında varmadan, @özelliğinin kullanımını ne olduğunu bilmeli.

  • @özellikbir sınıf saklanması için hazırlanmış ücretsiz bir şekilde bilgi tanımlamak için. Eğer bildirirseniz/değişken kullanarak nesne@özelliko/nesne değişkeni diğer sınıflar için kendi sınıf alma erişilebilir olacak.

  • Bir nesne kullanarak bildirirseniz@özellikbaşlık dosyasında, sonra da onu kullanarak sentezlenmesi@sentezuygulama dosyasında. Bu nesne yaparEP uyumlu. Varsayılan olarak, derleyici sentez edererişimci yöntemleribu nesne için.

  • erişimci yöntemleri vardır : Kurucu ve alıcı.

Örnek: .h

@interface XYZClass : NSObject
@property (nonatomic, retain) NSString *name;
@end

.m

@implementation XYZClass
@synthesize name;
@end

Şimdi derleyici için erişimci yöntemleri sentez ederadı.

XYZClass *obj=[[XYZClass alloc]init];
NSString *name1=[obj name]; // get 'name'
[obj setName:@"liza"]; // first letter of 'name' becomes capital in setter method
  • Özellikler listesi@özellik

    atom, nonatomic, saklama, salt okunur, okuma-yazma, atama kopya, güçlü, alıcı=yöntem, ayarlayıcı=yöntem, unsafe_unretained

  • atomvarsayılan davranıştır. Eğer bir nesne olarak atom bildirilirse o zaman iş parçacığı için güvenli olur. Thread-safe, bir anda bu sınıfın belirli bir örneği yalnızca bir iş parçacığı bu nesne üzerinde kontrol anlamına gelir.

Eğer bu konuyu daha sonra alıcı yöntemin uygulanması ise başka bir iş yapamaz o nesne üzerinde belirleyici yöntemi uygulayın. Yavaş.

@property NSString *name; //by default atomic`
@property (atomic)NSString *name; // explicitly declared atomic`
  • nonatomic-güvenli iş parçacığı değil. Eğer aynı değeri farklı bir iş parçacığı tarafından aynı anda erişilmesi durumunda nonatomic özellik özniteliği sentezlenmiş set sadece veya değeri doğrudan dönüş belirtmek için, ne olacağı hakkında hiçbir garanti ile kullanabilirsiniz.

Bu nedenle, daha hızlı bir atom birden nonatomic bir özelliğe erişmek için.

@property (nonatomic)NSString *name;   
  • koruröznitelik bir nesneye bir işaretçi gereklidir.

Ayarlayıcı yöntemi autorelease pool bellek işgal edecek kadar nesnenin sayısını artırmak korur.

@property (retain)NSString *name;
  • kopyalaEğer kopya kullanırsanız, korumak kullanamazsın. Sınıfın kopyasını kullanarak kendi kopyasını içerir.

Eğer değiştirilebilir bir dize olarak ayarlayın ve daha sonra değişirse bile, Örnek set zaman her yakalar. Alıcı ve ayarlayıcı yöntemleri sentezlenmiş olacaktır.

@property (copy) NSString *name;

şimdi

NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];    
xyzObj.name = nameString;    
[nameString appendString:@"Pizza"]; 

adıbundan etkilenmeyecektir.

  • salt okunurEğer bu özellik ayarlayıcısı yöntemi ile değiştirilmesine izin vermek istemediğiniz takdirde, özellik salt okunur bildirebilirsiniz.

Derleyici bir alıcı, ama bir pasör değil üretecektir.

@property (readonly) NSString *name;
  • okumayazmavarsayılan davranıştır. Okuma-yazma özniteliği açıkça belirtmek gerek yok.

Salt okunur tersidir.

@property (readwrite) NSString *name;
  • atayındoğrudan örnek değişkene değer atayan bir kurucu oluşturur, ya da kopyalama istinat yerine. Bu NSİnteger ve CGFloat, ya da doğrudan sizin değil nesneler, delegeler gibi ilkel türler için en iyisidir.

Akılda ve çöp toplama etkinleştirildiğinde temelde değiştirilebilir korumak ata tutmak.

@property (assign) NSInteger year;
  • güçlüyerini korumak için.

ARC ile birlikte geliyor.

@property (nonatomic, strong) AVPlayer *player; 
  • =yöntem alıcıEğer alıcı bir yöntem için farklı bir ad kullanmak istiyorsanız, mümkün özelliğine öznitelikler ekleyerek özel bir ad belirtin.

Boole özellikleri durumunda (bir EVET veya HAYIR değeri olan özellikler), alıcı yöntemine kelime ile başlamak adettendir “” dir

@property (getter=isFinished) BOOL finished;
  • =ayarlayıcı yöntemiEğer belirleyici bir yöntem için farklı bir ad kullanmak istiyorsanız, mümkün özelliğine öznitelikler ekleyerek özel bir ad belirtin.

Bu yöntem iki nokta ile bitmelidir.

@property(setter = boolBool:) BOOL finished;
  • unsafe_unretainedHenüz zayıf özelliği veya zayıf yerel bir değişken bunları takip etmek bildirebilirsiniz. yani zayıf başvurular, desteklemeyen Kakao bir kaç ders ve Cocoa Touch var. Bu sınıflar NSTextView, NSFont ve NSColorSpace,vb vardır. Eğer bu sınıflardan biri için zayıf bir başvuru kullanmanız gerekiyorsa, güvensiz bir başvuru kullanmanız gerekir.

Güvensiz bir başvuru ile ilgili bir nesne canlı tutmuyor zayıf bir referans benzer, ama set olmayacaknilhedef nesne kaldırıldı.

@property (unsafe_unretained) NSObject *unsafeProperty;

Eğer birden çok özniteliği belirtmeniz gerekir, sadece, bu gibi: virgülle ayrılmış bir liste halinde vardır

@property (readonly, getter=isFinished) BOOL finished;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011
  • Project Mooncircle

    Project Moon

    6 Aralık 2009