在目标c中创建实例

时间:2010-10-01 13:30:06

标签: objective-c instance

这是我的代码:

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

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

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

现在,如何从ECHOAppDelegate.m触发“startTask”?我需要创建一个实例?我是初学者:D

任何示例代码都很棒!

谢谢, 利亚

3 个答案:

答案 0 :(得分:0)

self代表当前对象。

你只需要调用这样的方法。

[self startTask];

答案 1 :(得分:0)

-(void)startTask;似乎是私有实现,理论上不应该从外部类调用。

要回答您的问题,您可以这样称呼:

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

虽然您会收到警告,PtyView可能无法回复startTask。因为它不在类的公共接口中。

更新:上面的代码假设当startTask返回时,您已完成此对象。但有些东西告诉我你可能正在使用异步回调。如果是这种情况,则startTask可能会立即返回,您不会在那里和那里发布它。通常在这种情况下,PtyView会通知您任务完成情况。所以你在任务完成后释放它。

<强> UPDATE2 : 公开方法很容易。您只需在公共接口(类的头文件)中声明它:

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

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

请注意,接口声明中没有定义类别。

答案 2 :(得分:0)

如何对ECHOAppDelegate进行子类化? (然后确保PtyView继承自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