【问题标题】:objective-c delegateObjective-C 委托
【发布时间】:2009-08-22 17:48:12
【问题描述】:

我目前正在使用地理编码。地理编码服务始终与代表一起使用。

所以说,我有一个

AskingClass 和 AnsweringClass(地理编码)

AskingClass 调用 AnsweringClass 中的函数返回当前位置的地址。

AnsweringClass 应该处理和封装地理编码的东西。我的问题是,对于所有这些代表,我无法回到请求类调用的原始函数。所以我不能轻易地回地址:

AskingClass.Adress= [AnsweringClass giveAdress];

我管理它,使用委托进行,因此结果返回到 askClass 中的委托函数(某处)中。但我对此并不满意。它似乎过大和复杂。

致以最诚挚的问候

克劳斯-迪特

【问题讨论】:

    标签: objective-c delegates return-type


    【解决方案1】:

    目前还不清楚您为什么要使用委托模式。为什么不直接使用类?

    类似这样的事情(假设您正在为头文件使用 PCH 文件,或者根据需要导入它们):

    AnsweringClass.h

    @interface AnsweringClass:NSObject
    - (MyAnswer *)answerThisDude;
    @end
    

    AskingClass.h

    @class AnsweringClass;  // just in case you including AskingClass.h before AnsweringClass.h
    @interface AskingClass : NSObject
    // {
    // declare the ivar if you need support for 32 bit "classic" ABI
    //    AnsweringClass *theThingThatAnswers;
    // }
    @property(retain) AnsweringClass *theThingThatAnswers;
    @end
    

    那么你可以这样做:

    AskingClass.m

    @implementation AskingClass
    @synthesize theThingThatAnswers;
    - (void) setUpMyStuff  // probably invoked by your designated initializer or app launch handler
    {
        self.theThingThatAnswers = [AnsweringClass new];
        MyAnswer *theFirstAnswer = [self.theThingThatAnswers answerThisDude];
    }
    
    // don't forget a -dealloc if you aren't running GC'd
    @end
    

    无需委托。

    【讨论】:

    • 不要忘记在setUpMyStuff 中释放新的应答对象,如果不是为仅 GC 目标编写的话。
    • 我省略了 -dealloc。让我解决这个问题。
    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多