SORU
4 Ocak 2012, ÇARŞAMBA


Objective-C: / örnek Özellik değişken kategori

Objective-C, bir Kategori olarak sentezlenmiş bir özellik oluşturmak edemem aşağıdaki kodu optimize etmek için nasıl bilmiyorum:

@interface MyClass (Variant)
@property (nonatomic, strong) NSString *test;
@end

@implementation MyClass (Variant)

@dynamic test;

- (NSString *)test {
    NSString *res;
    //do a lot of stuff
    return res;
}

@end

test yöntemiçalışma zamanı birden çok kez aramış ve bir sürü sonucu hesaplamak için yapıyorum. Normalde sentezlenen bir özellik ben kullanarak bir IVar yöntemi denir ilk kez _test ve sadece bu IVar bir dahaki sefere dönen değeri saklamak. Yukarıdaki kodu optimize edebilir miyim?

CEVAP
4 Ocak 2012, ÇARŞAMBA


@İorean yöntemi çalışır, ancak yalnızca tek bir depolama yuvası olurdu. Eğer birden çok örneği üzerinde bu kullanmak ve her örneği ayrı bir değer hesaplamak istersen, işe yaramasın diye.

Neyse ki, Objective-C çalışma zamanı, her şeyi çok istiyorsun tam olarak yapabilecek Associated Objects olarak adlandırılan:

#import <objc/runtime.h>

static void *MyClassResultKey;
@implementation MyClass

- (NSString *)test {
  NSString *result = objc_getAssociatedObject(self, &MyClassResultKey);
  if (result == nil) {
    // do a lot of stuff
    result = ...;
    objc_setAssociatedObject(self, &MyClassResultKey, result, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  }
  return result;
}

@end

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8bitdigitaltv

    8bitdigitalt

    31 AĞUSTOS 2011
  • GoldgenieOfficial

    GoldgenieOff

    23 Temmuz 2009
  • movies95

    movies95

    27 Kasım 2006