0

我需要创建一个获取委托的类进行一些计算,然后调用委托。

  • 我想在哪里释放我分配的对象?
  • 是否可以在不分配它的情况下初始化 MyClass 对象,这样我就不必释放它。
  • 做这样的事情的最佳做法是什么?(我正在尝试创建一个读取数据的 Web 服务类,一旦完成,它就会将数据发送回委托并自行销毁)?

    -(void)viewDidLoad { MyClass *class = [[MyClass alloc] initWithDelegate:self]; }

    -(void) MyClassRespond :(NSData*)data { //使用数据并在屏幕上填充 }

4

3 回答 3

1

该类不能自行销毁,并且您不能在不分配它的情况下初始化一个类对象(问题之一是字段在没有一些东西的情况下存储在哪里。

我不确定它为什么需要自行销毁,但通常的方法是在具有 viewDidLoad 方法的类中有一个 MyClass* _class 类型的变量。然后你会做相当于

-(void)viewDidLoad { _class = [[MyClass alloc] initWithDelegate:self]; }

-(void) MyClassRespond :(NSData*)data { 
      [_class release];
      //use data and populate on screen }

你当然也可以做一些你将 MyClass 传回委托方法的事情,比如

-(void)viewDidLoad {MyClass *class = [[MyClass alloc] initWithDelegate:self]; }

-(void) MyClassRespond :(NSData*)data fromClass: (MyClass*)class { 
      [class release];
      //use data and populate on screen }

在这种情况下,您的代表会将 MyClassResponds 称为

[delegate MyClassRespond:data fromClass:self];

尝试使 MyClass 可重用也可能是有意义的,这样您就不需要那么快地处理它,但我知道在某些情况下这不起作用。

于 2010-09-16T00:22:52.613 回答
1

让我们暂时假设您的委托是 的一个实例,Foo而调用该委托的对象是MyClass. 你的delegate财产MyClass应该是这样的:

@property (assign) id delegate;

当然,您可能希望delegate遵守某种协议,因此请根据需要使用id<...>语法。应始终分配代表。如果你保留,你可能会遇到一些奇怪的循环问题,这是你想要避免的。因此,您在适当的地方释放。即,无论您在哪里发布该 Foo 实例。理想情况下,无论如何,您都会在方法中释放MyClass实例Foo dealloc,因此您不会泄漏,并且没有任何对象可以调用委托。

于 2010-09-16T00:25:26.663 回答
0

以下对我有用,我只是将对象传递给我的委托方法并在那里释放它。这正是 NSUrlConnection 和其他一些类的工作方式,所以我认为这是正确的做法。

-(void)viewDidLoad 
{ 
     MyClass *class = [[MyClass alloc] initWithDelegate:self]; 
}

-(void) MyClassRespond :(MyClass*)myClass 
{ 
     NSData *myData = myClass.data;
     [myClass release];
}
于 2010-10-10T18:04:19.437 回答