簡體   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