目标C - 授权问题?

时间:2010-09-16 00:01:02

标签: iphone objective-c delegation

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

  • 我想在哪里发布我分配的对象?
  • 是否可以初始化MyClass 对象没有分配它,所以 这样我就不必释放它了。
  • 这样做的最佳做法是什么 一个东西? (我正在努力创造一个 读取数据的Web服务类, 一旦完成它就会发送 将数据备份给代表和它 摧毁自己)?

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

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

3 个答案:

答案 0 :(得分: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可重用也可能是有意义的,所以你不需要那么快地处理它,但我知道有些情况下这不起作用。

答案 1 :(得分:1)

我们假设你的委托是Foo的一个实例,而调用委托的对象是MyClassdelegate上的MyClass属性应如下所示:

@property (assign) id delegate;

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

答案 2 :(得分:0)

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

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

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