2012-12-06 2 views
0

Disons que j'ai cette propriété:force ARC de conserver une référence d'objet par un pointeur vide

@property (nonatomic, readwrite) void*** array; 

et initialiser le tableau avec des objets Objective-C:

- (id) init 
{ 
    if(self=[super init]) 
    { 
     array= malloc(10*sizeof(void**)); 
     for(NSUInteger i=0; i<10; i++) 
     { 
      array[i]= malloc(10*sizeof(void*)); 
      for(NSUInteger j=0; j<10; j++) 
      { 
       array[i][j]= (__bridge_retained void*) @"Hello"; 
      } 
     } 
    } 
    return self; 
} 

Je trouve que les objets ne sont pas vraiment retenus:

Custom* c=[Custom new]; 
NSLog(@"%@",(__bridge NSString*)c.array[40][40]); 

Ceci imprime (nul), je pensais que le pont retenu moulé a forcé à retenir l'objet, comment contourner cela?

+1

Je suis confus. Pourquoi ne pas simplement le taper correctement? – Chuck

+1

Pourquoi voudriez-vous un pointeur comme ça? Pourquoi ne pas utiliser NSArray, vous semblez contenir NSObjects de toute façon? En outre, il est probablement l'impression de nulle ou d'autres déchets parce que vous n'avez pas 40 éléments à l'intérieur. –

+0

Indiqué c'était le problème. Je n'ai pas utilisé id juste pour tester comment "forcer ARC à conserver des objets". –

Répondre

0

La raison pour laquelle vous obtenez une valeur nulle (ou aléatoire) est que vous avez alloué et rempli votre tableau avec 10 éléments, puis que vous essayez d'accéder au 40ème élément.

0

Vous pouvez essayer d'utiliser le type 'id' au lieu du type 'void'.

'id' est aussi abstrait.

+0

Je sortais des limites. –

Questions connexes