gpt4 book ai didi

objective-c - 动态更改对象的父类(super class)

转载 作者:太空狗 更新时间:2023-10-30 03:31:40 24 4
gpt4 key购买 nike

是否可以在运行时更改对象的父类(super class)?如果是,怎么办?

最佳答案

一个简短的问题,一个简短的回答:是的,是一个 swizzling

What Makes Objective C Dynamic?, page 66


一个例子:

我有一个处理与 REST-API 的连接的类,它称为 APIClient。在测试中,我想连接到不同的服务器。

在测试目标中,我将 APIClient 子类化

#import "ApiClient.h"

@interface TestApiClient : ApiClient
//…
@end


@interface TestApiClient ()
@property (nonatomic, strong, readwrite) NSURL *baseURL;

@end


@implementation TestApiClient

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
{
self.baseURL = [NSURL URLWithString:@"http://localhost:8000/"];
return [super requestWithMethod:method path:path parameters:parameters];
}

@end

在单元测试课上我做调配 #导入

@implementation APIUnitTests


+(void)load
{
client = [[ApiClient alloc ] init];
object_setClass(client, [TestApiClient class]);
}

//…
@end

这个cas是save,因为我首先创建了一个基类的子类,然后用子类替换了后者。由于子类也是基类,所以这是有效的继承。

关于objective-c - 动态更改对象的父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com