SORU
25 Temmuz 2011, PAZARTESİ


Doğru ARC için köprü?

NSString için kategori Dersim var.

@implementation NSString (URLEncode)

- (NSString *)URLEncodedString
{
    __autoreleasing NSString *encodedString;

    NSString *originalString = (NSString *)self;    
    encodedString = (__bridge_transfer NSString * )
            CFURLCreateStringByAddingPercentEscapes(NULL,
                                (__bridge CFStringRef)originalString,
                                NULL,
                                (CFStringRef)@"!*'();:@&= $,/?%#[]",
                                kCFStringEncodingUTF8);
    return encodedString;
}

ARC ve yeni LLVM için doğru bir köprü transferler mi kullanıyorum?

Orijinal kodu:

- (NSString *)URLEncodedString
    NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                (CFStringRef)self,
                                NULL,
                                (CFStringRef)@"!*'();:@&= $,/?%#[]",
                                kCFStringEncodingUTF8);
    return [encodedString autorelease];
}

CEVAP
25 Temmuz 2011, PAZARTESİ


Açıklamalarda belirtildiği gibi, güzel ARC ve Automatic Reference Counting içeriğini burada hakkında konuşmak olduğunu düşünüyorum.

__autoreleasing Bu şekilde kullanılmak üzere tasarlanmıştır. Dolaylı nesne başvurularını (**vb NSError) geçiş için kullanılır. 4.3.4 Passing to an out parameter by writeback bkz.

3.2.4 Bridged casts, CFURLCreateStringByAddingPercentEscapes işlevi __bridge_transfer doğru göre verir tutulan bir nesne ("oluştur" adını). ARC nesne eklemek ve bir serbest bırakma iade sahipliğini almak istiyorum (ya da bu durumda autorelease) bu dengelemek için.

originalstring __bridge dökme doğrudur, ARC bu konuda özel bir şey yapmak istemiyorum da.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dive In

    Dive In

    17 Temmuz 2013
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • ODN

    ODN

    26 Kasım 2006