繁体   English   中英

目标C-授权问题?

[英]Objective C - delegation question?

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

  • 我应该在哪里释放分配的对象?
  • 是否可以初始化MyClass对象而不分配它,这样我就不必释放它。
  • 做这种事情的最佳实践是什么? (我正在尝试创建一个读取数据的Web服务类,并在完成后立即将数据发送回委托并破坏自身)?

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

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

类无法销毁自身,并且不能在不分配类的情况下初始化类对象(问题之一是字段的确切存储位置,而没有任何内容。

我不确定为什么需要销毁它自己,但是通常的方法是使用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可重用也可能很有意义,因此您不需要这么快地处理它,但是我知道在某些情况下这是行不通的。

现在让我们假设您的委托是Foo的实例,并且调用该委托的对象是MyClass 您在MyClass上的delegate属性应如下所示:

@property (assign) id delegate;

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

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

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

-(void) MyClassRespond :(MyClass*)myClass 
{ 
     NSData *myData = myClass.data;
     [myClass release];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM