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

  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008
  • TrenchTech Computer Repair Tutorials

    TrenchTech C

    19 EYLÜL 2014
  • Willie D.

    Willie D.

    16 Aralık 2006