gpt4 book ai didi

ios - 基础类(class)的扩展

转载 作者:行者123 更新时间:2023-12-03 16:51:16 25 4
gpt4 key购买 nike

由于基础类(例如 NSString)的 .m 文件不可用,我在想是否可以在同一类上声明的类别的 .m 文件内声明一个扩展名。我成功创建了一个私有(private)方法,该方法内部不使用任何实例变量。但是当我尝试访问接口(interface)内声明的 iVar 时,它会导致问题。
*这没有任何目的,只是尝试一下。

我所做的是在 NSString 上声明一个类别:

NSString+TestInterface.h

@interface NSString (TestInterface)
@end

NSString+TestInterface.m

@interface NSString () {

NSString *myVar;
}
@property (strong) NSString *myVar;
-(void)myPrivateMethod;
@end


@implementation NSString (TestInterface)
-(void)myPrivateMethod{
myVar=@"random";
// [self setValue:@"check" forKey:@"myVar"];

NSLog(@"Private %@",myVar);
// NSLog(@"Private %@",[self valueForKey:@"myVar"]);
}

@end

当我这样做时,我收到以下编译器错误:

Undefined symbols for architecture x86_64:
"_OBJC_IVAR_$_NSString.myVar", referenced from: -[NSString(TestInterface) myPrivateMethod] in NSSTring+TestInterface.o ld: symbol(s) not found for architecture x86_64

谁能告诉我发生了什么事吗?

最佳答案

您不能在您不拥有其实现(.m 文件)的外部类的扩展/类别中添加实例变量。

您当然可以添加充当 setter 和 getter 的方法。对于实际值的存储,您可以使用 objc_setAssociatedObject,它是某种全局存储,您可以在其中将值与键和对象的实例关联起来。

这里有很好的解释、讨论和示例:What is objc_setAssociatedObject() and in what cases should it be used?

关于ios - 基础类(class)的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061861/

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