SORU
14 EKİM 2010, PERŞEMBE


Objective-C blok özellikleri olarak kullanabilir miyim?

Özellikleri standart özellik sözdizimini kullanarak blokları yok etmek mümkün mü?

YAY için herhangi bir değişiklik var mı?

CEVAP
14 EKİM 2010, PERŞEMBE


İşte böyle bir görevi başarmak istiyorsunuz nasıl bir örnek:

#import <Foundation/Foundation.h>
typedef int (^IntBlock)();

@interface myobj : NSObject
{
    IntBlock compare;
}

@property(readwrite, copy) IntBlock compare;

@end

@implementation myobj

@synthesize compare;

- (void)dealloc 
{
   // need to release the block since the property was declared copy. (for heap
   // allocated blocks this prevents a potential leak, for compiler-optimized 
   // stack blocks it is a no-op)
   // Note that for ARC, this is unnecessary, as with all properties, the memory management is handled for you.
   [compare release];
   [super dealloc];
}
@end

int main () {
    @autoreleasepool {
        myobj *ob = [[myobj alloc] init];
        ob.compare = ^
        {
            return rand();
        };
        NSLog(@"%i", ob.compare());
        // if not ARC
        [ob release];
    }

    return 0;
}

Şimdi, Eğer karşılaştırın türünü değiştirmeniz gerekirse değiştirmek için gereken tek şey typedef int (^IntBlock)() olurdu. Eğer bu iki nesnenin geçmesi gerekir, bu şekilde değiştirin: 4* *ve bloğunu değiştir:

^ (id obj1, id obj2)
{
    return rand();
};

Bu yardımcı olur umarım.

12 Mart 2012 DÜZENLEYİN:

ARC için belirli değişiklikler ARK senin için bloklar, kopyalama gibi tanımlanmış oldukları sürece yönetecek gerektiği gibi, vardır. Mülkiyet ve yıkıcı sıfır ya da ayarlamak için gerekmez.

Daha fazla okuma için, lütfen bu belgeye göz atın: http://clang.llvm.org/docs/AutomaticReferenceCounting.html

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • superflyy88

    superflyy88

    8 ŞUBAT 2009
  • TurkishRoyal

    TurkishRoyal

    16 Ocak 2007
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012