SORU
22 EYLÜL 2009, Salı


Nasıl objective c bir nesne kopyalamak

Derin kendi nesneleri özel bir nesne kopyalamak istiyorum. Etrafında okuyordum ve biraz NSCopyObject kullanmayı NSCopying devralmak için nasıl olarak karıştı. Biri bana yardım edebilir mi? Okuma için teşekkürler!

CEVAP
22 EYLÜL 2009, Salı


Her zaman referans türleri ile, iki kavram vardır "dedi. kopyala Bunları bildiğine eminim, ama bütünlüğü için.

  1. Bir bit kopyalayın. Bu, biz sadece bit bellek bit kopyalama - bu NSCopyObject yapıyor. Neredeyse her zaman, ne istediğini değil. Nesneleri iç durum, diğer nesneler, vb, ve genellikle sadece onlar verilere başvuru tutuyorlar varsayım yapmak. Bit kopyalar bu varsayımı Ara.
  2. Derin, mantıksal bir kopyası. Bu, biz bir kopyasını nesne, ama aslında ne yaptığını yavaş yavaş istediğimiz bir nesne davranır aynı için tüm niyet ve amaçlar, ama değil (mutlaka) bir bellek-aynı klon asıl Amaç, C manuel çağırır, böyle bir nesne "fonksiyonel olarak bağımsız" orijinal. Bu "sınıftan sınıfa değişir kopyaları, nesnelerin kendilerini bunları gerçekleştirmek istiyoruz." zeki hale getirmek için mekanizmalar çünkü Bu NSCopying protokoldür.

İkincisi istiyorsun. Eğer bu kendi eşyalardan biri, sadece protokol NSCopying benimsemek ve -(ıd)copyWithZone:(NSZone *)bölgesine uygulamak gerekir. İstediğini yapmakta özgürsün; fikri olmasına rağmen kendini gerçek bir kopyasını ve iade. Tüm alanları copyWithZone, derin bir kopyasını yapmak için arayın. Basit bir örnektir

@interface YourClass : NSObject <NSCopying> 
{
   SomeOtherObject *obj;
}

// In the implementation
-(id)copyWithZone:(NSZone *)zone
{
  // We'll ignore the zone for now
  YourClass *another = [[YourClass alloc] init];
  another.obj = [obj copyWithZone: zone];

  return another;
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • picster

    picster

    20 NİSAN 2006
  • psidot

    psidot

    2 Kasım 2006
  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012