2010-10-01 2 views
0

Voici mon code:créer des instances dans l'objectif c

//ECHOAppDelegate.m 
@implementation ECHOAppDelegate 
... 
@end 

//PtyView.m 
@interface PtyView (PtyPrivate) 
-(void)startTask; 
-(void) didRead: (NSNotification *)fileNoty; 
@end 

@implementation PtyView 
... 
-(void)startTask { 
//starts task 
} 
@end 

Maintenant, comment puis-je déclencher "startTask" de ECHOAppDelegate.m? J'ai besoin de créer une instance? Je suis un débutant total: D

Tout exemple de code serait génial!

Merci, Elijah

+0

Pour ajouter au-dessous, vos classes doivent toujours hériter de NSObject (sauf si vous avez une très bonne raison de ne pas), car cela est nécessaire pour des choses comme la gestion de la mémoire En outre, vous pourriez vouloir vérifier l'obj-c d'un débutant pour avoir un aperçu de ce genre de choses. Il y en a un bon sur http://cocoadevcentral.com/d/learn_objectivec/ –

+0

@Chris: Bien que votre avis soit parfaitement valide, je ne suis pas sûr de ce qui vous a fait croire qu'il n'hérite pas de NSObject? Il n'a certainement pas inclus le code du fichier d'en-tête de 'PtyView'. Néanmoins, c'est un bon point à retenir. – Hemant

+0

Ah. Vous n'avez pas vu la catégorie sur PtyView. Cela m'apprendra à le faire juste après le lever .. :-) –

Répondre

0

-(void)startTask; semble être mise en œuvre privée et, en théorie, ne devrait pas être appelé des classes externes.

Pour répondre à votre question, vous pouvez appeler quelque chose comme ceci:

PtyView *v = [[PtyView alloc] init]; 
[v startTask]; 
[v release]; 

Bien que vous obtiendrez un avertissement disant PtyView pourrait ne pas répondre à startTask. Puisque ce n'est pas dans l'interface publique de la classe.

Mise à jour: Le code ci-dessus suppose que lorsque startTask renvoie, vous avez terminé avec cet objet. Mais quelque chose me dit que vous pourriez utiliser des rappels asynchrones. Si tel est le cas, alors startTask pourrait revenir immédiatement et vous ne le relâcherez pas encore et encore. Normalement dans ce cas, vous serez notifié par PtyView de l'achèvement de la tâche. Donc, vous le relâchez lorsque la tâche est terminée.

Update2: Rendre une méthode publique est facile. Vous déclarez que dans l'interface publique (le fichier d'en-tête de la classe):

//in PtyView.h 
@interface PtyView 
-(void)startTask; 
@end 

//in PtyView.m 
@implementation PtyView 
... 
-(void)startTask { 
//starts task 
} 
@end 

avis qu'il n'y a pas de catégorie définie dans la déclaration d'interface.

+0

Comment puis-je rendre startTask public? – objectiveccoder001

+0

Mis à jour la réponse! – Hemant

0

self représentent l'objet courant.

Vous avez juste besoin d'appeler la méthode comme ça.

[self startTask]; 
0

Que diriez-vous de sous-classer ECHOAppDelegate? (Ensuite, assurez-vous PtyView hérite de NSObject?)

// cf. http://amath.colorado.edu/pub/mac/programs/PseudoTTY.zip 

@interface ECHOAppDelegate : PtyView 
... 
@end 

@implementation ECHOAppDelegate 
- (id) init 
{ 
    self = [super init]; 
    if (!self) return nil; 
    ... 
    return self; 
} 

... 
    [self startTask]; 
... 
@end 
Questions connexes