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

  • GamingAndTech

    GamingAndTec

    16 NİSAN 2013
  • H3Ctic (old channel)

    H3Ctic (old

    23 Mart 2011
  • placeboing

    placeboing

    7 Mart 2006