Créer/Affecter une CGImageRef

2»

Réponses

  • schlumschlum Membre
    18:54 modifié #32
    Oki... En tout cas c'est castable en (id) quoi...
  • Philippe49Philippe49 Membre
    18:54 modifié #33
    dans 1199281506:

    Oki... En tout cas c'est castable en (id) quoi...


    Cela ressemble (et peut-être basé sur) au principe C des unions
  • psychoh13psychoh13 Mothership Developer Membre
    18:54 modifié #34
    dans 1199283173:

    dans 1199281506:

    Oki... En tout cas c'est castable en (id) quoi...


    Cela ressemble (et peut-être basé sur) au principe C des unions


    Euh non pas vraiment, le principe des unions c'est d'utiliser qu'un seul bloc de mémoire pour contenir deux variables différentes. Par exemple si j'écris :
    union Test {<br />&nbsp; &nbsp; int entier;<br />&nbsp; &nbsp; float decimal;<br />};
    


    Ici, "union Test" fera 4 octets et non pas 8 si on remplace "union" par "struct", les champs "entier" et "decimal" occupe le même espace mémoire.

    Alors que ce qui permet de faire ce genre de manipulation ici, c'est le fait que deux types différents soient interchangeables parce qu'ils ont des champs identiques et placés dans le même ordre.
  • Philippe49Philippe49 Membre
    janvier 2008 modifié #35
    dans 1199283891:

    Euh non pas vraiment, le principe des unions c'est d'utiliser qu'un seul bloc de mémoire pour contenir deux variables différentes. Par exemple si j'écris :
    union Test {
        int entier;
        float decimal;
    };

    Ici, "union Test" fera 4 octets et non pas 8 si on remplace "union" par "struct", les champs "entier" et "decimal" occupe le même espace mémoire.

    Oui, je sais ce qu'est une union : le même bloc mémoire est déclaré pouvoir être interprété de différentes façons, évitant ainsi des cast fastidieux sur les adresses.

    dans 1199283891:

    Alors que ce qui permet de faire ce genre de manipulation ici, c'est le fait que deux types différents soient interchangeables parce qu'ils ont des champs identiques et placés dans le même ordre.

    Cela ne semble nécessaire qu'au début du bloc mémoire seulement, c'est pour cela que je parle d'union.
  • psychoh13psychoh13 Mothership Developer Membre
    18:54 modifié #36
    dans 1199284651:
    dans 1199283891:

    Alors que ce qui permet de faire ce genre de manipulation ici, c'est le fait que deux types différents soient interchangeables parce qu'ils ont des champs identiques et placés dans le même ordre.

    Cela ne semble nécessaire qu'au début du bloc mémoire seulement, c'est pour cela que je parle d'union.


    Excuse-moi mais je vois toujours pas la relation avec les unions. o_O
  • Philippe49Philippe49 Membre
    18:54 modifié #37
    J'ai en tête le modèle des événements boutons, claviers, expose, ... , dans la bibliothèque XLib qui sont définis par des unions, avec en début de bloc mémoire les éléments communs (type, géométrie, ..) et les infos spécifiques en fin de bloc.
  • schlumschlum Membre
    18:54 modifié #38
    Non, pas possible que ça soit une "union"... Sinon on détruirait des paramètres de la structure du type CF en l'utilisant comme un NSObject  :P
  • Philippe49Philippe49 Membre
    18:54 modifié #39
    Une petite macro qui rejoint ce qui a été dit dans ce poste (trouvé dans un exemple utilisant Core Graphics)

    #define CGAutorelease(x) (__typeof(x))[NSMakeCollectable(x) autorelease]

    et la doc qui va avec

    NSMakeCollectable
    Makes a newly allocated Core Foundation object eligible for collection.

    NS_INLINE id NSMakeCollectable(CFTypeRef cf) {
      return cf ? (id)CFMakeCollectable(cf) : nil;
    }
    Discussion
    This function is a wrapper for CFMakeCollectable, but its return type is id"avoiding the need for casting when using Cocoa objects.

    This function may be useful when returning Core Foundation objects in code that must support both garbage-collected and non-garbage-collected environments, as illustrated in the following example.

    - (CFDateRef)foo {
        CFDateRef aCFDate;
        // ...
        return [NSMakeCollectable(aCFDate) autorelease];
    }
    CFTypeRef style objects are garbage collected, yet only sometime after the last CFRelease is performed. Particularly for fully-bridged CFTypeRef objects such as CFStrings and collections (such as CFDictionary), it is imperative that either CFMakeCollectable or the more type safe NSMakeCollectable be performed, preferably right upon allocation.
Connectez-vous ou Inscrivez-vous pour répondre.