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

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012