SORU
16 ŞUBAT 2011, ÇARŞAMBA


Arama [self code>] bir blok içinden?

Sadece blok rastladım ve tam aradığım bir şey dışında olduğunu düşünüyorum: bir yöntem [öz] code > bloğu içinde arama yapmak mümkün mü?

Bu yapmak istediğim şey:

-(void)someFunction{
    Fader* fader = [[Fader alloc]init];

    void (^tempFunction)(void) = ^ {
        [self changeWindow:game]; 
        //changeWindow function is located in superclass
    };

    [fader setFunction:tempFunction];
}

Birkaç gün sonra aradım ve bunun mümkün olduğuna dair herhangi bir kanıt bulamıyorum.

Bu mümkünse, ya içindir değil mi bir şey için blokları kullanmak için çalışıyorum?

Blokları kullanarak olmamın sebebi Faser bir sınıf oluşturduk ve solma tamamlandığında çalıştırmak için bir blok mağaza etmek istiyorum.

Teşekkür ederim

EDİT: Tamam, öneri olarak ekledim, ama hala EXC_BAD_ACCESS bir hata alıyorum

-(void)someFunction{
    Fader* fader = [[Fader alloc]init];

    __block MyScreen* me = self;

    void (^tempFunction)(void) = ^ {
        [me changeWindow:game]; 
        //changeWindow function is located in superclass
    };

    [fader setFunction:tempFunction];
    [fader release];
}

Belki vermeye yetkim yokfaserfonksiyonu...?

CEVAP
16 ŞUBAT 2011, ÇARŞAMBA


Evet, bunu yapabilirsiniz.

Blok self korur unutmayın. Bu blok depolama bir ıvar ise olabilirkolaybir de hiç ayırmanın alacağı anlamına gelir döngüsü, korumak oluşturun.

Bunu çözmek için, bunu yapabilirsiniz:

- (void) someMethodWithAParameter:(id)aParameter {

  __block MySelfType *blocksafeSelf = self;
  void (^tempFunction)(void) = ^ {
      [blocksafeSelf changeWindow:game];
  };

  [self doSomethingWithBlock:tempFunction];

}

Başvurulan nesne korunmaz __block anahtar kelime anlamına gelir (diğer şeyler arasında).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autocar

    Autocar

    11 Mart 2006
  • listedabive

    listedabive

    30 Ocak 2007
  • LivestrongWoman

    LivestrongWo

    1 Aralık 2011