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

  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • lissaandbeauty

    lissaandbeau

    24 Aralık 2011
  • SlimaksClass

    SlimaksClass

    15 Kasım 2010