Бесплатные соединенные мостом типы

Существует много типов данных в Базовой платформе Основы и платформе Основы, которая может использоваться взаимозаменяемо. Типы данных, которые могут использоваться взаимозаменяемо, также упоминаются как бесплатные соединенные мостом типы данных. Это означает, что можно использовать ту же структуру данных в качестве параметра Базовому вызову функции Основы или как получатель вызова сообщения Objective C. Например, NSLocale (см. Ссылку класса NSLocale), является взаимозаменяемым ее Базовым дубликатом Основы, CFLocale (см. Ссылку CFLocale).

Не все типы данных бесплатные соединенный мостом, даже при том, что их имена могли бы предположить, что они. Например, NSRunLoop не бесплатный соединенный мостом к CFRunLoop, NSBundle не бесплатный соединенный мостом к CFBundle, и NSDateFormatter не бесплатный соединенный мостом к CFDateFormatter. Таблица 1 обеспечивает список типов данных, поддерживающих бесплатное образование моста.

Кастинг и объектная пожизненная семантика

Посредством бесплатного образования моста, в методе, где Вы видите, например, NSLocale * параметр, можно передать a CFLocaleRef, и в функции, где Вы видите a CFLocaleRef параметр, можно передать NSLocale экземпляр. Также необходимо предоставить другую информацию для компилятора: во-первых, необходимо бросить один тип к другому; кроме того, Вам, вероятно, придется указать объектную пожизненную семантику.

Компилятор понимает методы Objective C, возвращающие Базовые типы Основы и следующие историческим соглашениям о присвоении имен Какао (см. Усовершенствованное Руководство по программированию управления памятью). Например, компилятор знает что, в iOS, CGColor, возвращенный CGColor метод UIColor не принадлежит. Необходимо все еще использовать надлежащий бросок типа, как проиллюстрировано этим примером:

NSMutableArray *colors = [NSMutableArray arrayWithObject:(id)[[UIColor darkGrayColor] CGColor]];
[colors addObject:(id)[[UIColor lightGrayColor] CGColor]];

Компилятор автоматически не управляет временами жизни Базовых объектов Основы. Вы говорите компилятор о семантике владения объектов с помощью любого бросок (определенный в objc/runtime.h) или Базовый макрос Стиля основы (определенный в NSObject.h):

Некоторые из них показаны в следующем примере:

NSLocale *gbNSLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
CFLocaleRef gbCFLocale = (__bridge CFLocaleRef)gbNSLocale;
CFStringRef cfIdentifier = CFLocaleGetIdentifier(gbCFLocale);
NSLog(@"cfIdentifier: %@", (__bridge NSString *)cfIdentifier);
// Logs: "cfIdentifier: en_GB"
 
CFLocaleRef myCFLocale = CFLocaleCopyCurrent();
NSLocale *myNSLocale = (NSLocale *)CFBridgingRelease(myCFLocale);
NSString *nsIdentifier = [myNSLocale localeIdentifier];
CFShow((CFStringRef)[@"nsIdentifier: " stringByAppendingString:nsIdentifier]);
// Logs identifier for current locale

Следующий пример показывает использование Базовых функций управления памятью Основы, где продиктовано Базовыми правилами управления памятью Основы:

- (void)drawRect:(CGRect)rect {
 
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
    CGFloat locations[2] = {0.0, 1.0};
    NSMutableArray *colors = [NSMutableArray arrayWithObject:(id)[[UIColor darkGrayColor] CGColor]];
    [colors addObject:(id)[[UIColor lightGrayColor] CGColor]];
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, locations);
    CGColorSpaceRelease(colorSpace);  // Release owned Core Foundation object.
 
    CGPoint startPoint = CGPointMake(0.0, 0.0);
    CGPoint endPoint = CGPointMake(CGRectGetMaxX(self.bounds), CGRectGetMaxY(self.bounds));
    CGContextDrawLinearGradient(ctx, gradient, startPoint, endPoint,
                                kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
    CGGradientRelease(gradient);  // Release owned Core Foundation object.
}

Бесплатные соединенные мостом типы

Таблица 1 обеспечивает список типов данных, которые являются взаимозаменяемыми между Базовой Основой и Основой. Для каждой пары таблица также приводит версию OS X, в котором бесплатное образование моста между ними стало доступным.

Табличные 1  Типы данных, которые могут использоваться взаимозаменяемо между Базовой Основой и Основой

Базовый тип Основы

Фундаментальный класс

Доступность

CFArrayRef

NSArray

 OS X v10.0

CFAttributedStringRef

NSAttributedString

 OS X v10.4

CFCalendarRef

NSCalendar

 OS X v10.4

CFCharacterSetRef

NSCharacterSet

 OS X v10.0

CFDataRef

NSData

 OS X v10.0

CFDateRef

NSDate

 OS X v10.0

CFDictionaryRef

NSDictionary

 OS X v10.0

CFErrorRef

NSError

 OS X v10.5

CFLocaleRef

NSLocale

 OS X v10.4

CFMutableArrayRef

NSMutableArray

 OS X v10.0

CFMutableAttributedStringRef

NSMutableAttributedString

 OS X v10.4

CFMutableCharacterSetRef

NSMutableCharacterSet

 OS X v10.0

CFMutableDataRef

NSMutableData

 OS X v10.0

CFMutableDictionaryRef

NSMutableDictionary

 OS X v10.0

CFMutableSetRef

NSMutableSet

 OS X v10.0

CFMutableStringRef

NSMutableString

 OS X v10.0

CFNumberRef

NSNumber

 OS X v10.0

CFReadStreamRef

NSInputStream

 OS X v10.0

CFRunLoopTimerRef

NSTimer

 OS X v10.0

CFSetRef

NSSet

 OS X v10.0

CFStringRef

NSString

 OS X v10.0

CFTimeZoneRef

NSTimeZone

 OS X v10.0

CFURLRef

NSURL

 OS X v10.0

CFWriteStreamRef

NSOutputStream

 OS X v10.0