Objective c 旧版本是否应该替换不推荐的委托方法?

Objective c 旧版本是否应该替换不推荐的委托方法?,objective-c,delegates,deprecated,api-design,objective-c-protocol,Objective C,Delegates,Deprecated,Api Design,Objective C Protocol,我在Objective-C中创建了一个适当的委托协议,我正在更新它。其中一个更新要求一个方法被弃用,但它在技术上暂时仍然有效 这是原始的委托方法。注意它是可选的,所以它不是一个基本的方法,这会影响我对它是否应该保持功能的判断 @protocol MyDelegate <NSObject> @optional - (void)requestFailedWithError:(NSError *)error; @end 现在我已经更新了。在更新中,一个更好的选择似乎是根据错误发生的时

我在Objective-C中创建了一个适当的委托协议,我正在更新它。其中一个更新要求一个方法被弃用,但它在技术上暂时仍然有效

这是原始的委托方法。注意它是可选的,所以它不是一个基本的方法,这会影响我对它是否应该保持功能的判断

@protocol MyDelegate <NSObject>

@optional
- (void)requestFailedWithError:(NSError *)error;

@end
现在我已经更新了。在更新中,一个更好的选择似乎是根据错误发生的时间将函数划分为唯一的错误返回,因为此方法的使用增加到两个以上的位置,并且可能有非常不同的响应。这允许使用者忽略特定类型的错误,或者至少以不同的方式处理每个错误,而无需使用巨大的
if
语句。以下是新的委托方法:

@protocol MyDelegate <NSObject>

@optional
- (void)aRequestFailedWithError:(NSError *)error;
- (void)bRequestFailedWithError:(NSError *)error;

- (void)requestFailedWithError:(NSError *)error DEPRECATED_ATTRIBUTE;

@end
当时这似乎是一个好主意,但我只是在不推荐的情况下保持它的功能,从而延长了该方法的使用时间吗?我觉得不推荐的方法应该是功能性的,只是不鼓励使用。到时候,把整个方法都扯下来


这似乎是一种常见做法、一个好主意等吗?欢迎所有评论。在处理此类API更改时,只需寻找最佳模式。

取决于您的受众。如果您正在编写一个供其他组织使用的API,那么您所做的(在一定程度上)是好的。如果只是内部用户的问题,并且可以很快解决该方法的使用问题,那么现在就进行清理。“中间路线”方法是注意方法的存在,并在看到时发出(NSLog)警告,无论您是否使用双模式。它是内部的,但项目不会经常更新,也不会由同一个开发人员更新,因此当打开项目时,它很有可能会过时,这就是为什么我选择不推荐使用内部库的原因。我宁愿它抛出不推荐的警告而不是错误,以防项目需要修补程序。就“某一点”而言,我计划让这一点继续下去,直到对学员进行另一次更改。
@protocol MyDelegate <NSObject>

@optional
- (void)aRequestFailedWithError:(NSError *)error;
- (void)bRequestFailedWithError:(NSError *)error;

- (void)requestFailedWithError:(NSError *)error DEPRECATED_ATTRIBUTE;

@end
if ([self.delegate respondsToSelector:@selector(aRequestFailedWithError:)]) {
    [self.delegate aRequestFailedWithError:error];
} else {
    if ([self.delegate respondsToSelector:@selector(requestFailedWithError:)]) {
        [self.delegate requestFailedWithError:error];
    }
}