recherche

Maison  >  Questions et réponses  >  le corps du texte

cocoa-touch - core foundation与objective-c区别?

core foundation与objective-c之间有什么关系和区别?

怪我咯怪我咯2769 Il y a quelques jours548

répondre à tous(1)je répondrai

  • PHPz

    PHPz2017-04-21 11:18:12

    Le framework Core Foundation (CoreFoundation.framework) est un ensemble d'interfaces en langage C qui fournissent des fonctions de base de gestion des données et de service pour les applications iOS. Voici une liste des données que le framework prend en charge pour la gestion et des services qu'il peut fournir :

    Type de données de groupe (tableau, collection, etc.)

    Forfait

    Gestion des chaînes

    Gestion des dates et des heures

    Gestion des blocs de données d'origine

    Gestion des préférences

    Opérations d'URL et de flux de données

    Threads et RunLoop

    Communication port et prise

    Le framework Core Foundation et le framework Foundation sont étroitement liés, ils fournissent des interfaces pour les mêmes fonctions, mais le framework Foundation fournit une interface Objective-C. Si vous mélangez des objets Foundation avec des types Core Foundation, vous pouvez profiter d'un « pont gratuit » entre les deux frameworks. Le pontage dit sans frais signifie que vous pouvez utiliser certains types dans les frameworks Core Foundation et Foundation en même temps dans une méthode ou une fonction d'un certain framework. De nombreux types de données prennent en charge cette fonctionnalité, notamment les types de données de groupe et de chaîne. La description de classe et de type de chaque framework décrira si un objet est ponté sans frais et vers quels objets il doit être ponté.

    Conversion entre pointeurs Objective-C et pointeurs CoreFoundation

    ARC gère uniquement les pointeurs Objective-C (retain, release, autorelease) et ne gère pas les pointeurs CoreFoundation. Les pointeurs CF sont gérés manuellement et gérés manuellement par CFRetain et CFRelease.

    Lors de la conversion des pointeurs CocoaFoundation et des pointeurs CoreFoundation, vous devez prendre en compte la propriété des objets pointés. ARC fournit 3 modificateurs pour la gestion.

    1. __bridge, ne fait rien, se contente de convertir. Dans ce cas :

    i). Pour convertir de Cocoa en Core, CFRetain manuel est requis. Sinon, une fois le pointeur Cocoa relâché, le pointeur transmis ne sera pas valide.

    ii). La conversion de Core en Cocoa nécessite un CFRelease manuel. Sinon, une fois le pointeur Cocoa libéré, le nombre de références d'objet est toujours de 1 et ne sera pas détruit.

    2. __bridge_retained, appelle automatiquement CFRetain après la conversion, ce qui permet de résoudre automatiquement la situation ci-dessus.

    3. __bridge_transfer, appelle automatiquement CFRelease après la conversion, ce qui permet de résoudre automatiquement la situation ci-dessus.

    Comme ARC ne peut pas gérer le cycle de vie de Core Foundation Object, nous devons utiliser les trois mots-clés de conversion __bridge, __bridge_retained et __bridge_transfer entre Core Foundation et ARC.

    Selon la documentation officielle d'Apple (https://developer.apple.com/library/i...) :

    __bridge effectue uniquement la conversion de type, mais ne modifie pas les droits de gestion des objets (mémoire)

    ;

    __bridge_retained (CFBridgingRetain peut également être utilisé) convertit les objets Objective-C en objets Core Foundation, et en même temps nous confie la gestion des objets (mémoire). Par la suite, nous devons utiliser CFRelease ou des méthodes associées pour. libérer les objets

    __bridge_transfer (CFBridgingRelease peut également être utilisé) convertit les objets Core Foundation en objets Objective-C, tout en confiant la gestion des objets (mémoire) à ARC.

    répondre
    0
  • Annulerrépondre