gpt4 book ai didi

ios - (NSString *) 它是指针还是 NSString?

转载 作者:可可西里 更新时间:2023-11-01 05:25:15 29 4
gpt4 key购买 nike

我对这个功能有疑问:

- (instancetype)initWithCenter:(CLLocationCoordinate2D)center
radius:(CLLocationDistance)radius
identifier:(NSString *)identifier;

在 Pascal 中,identifier:(NSString *)identifier 是否必须转换为 PointerNSString

在delphi源码中,这个函数是这样转换的:

function initWithCenter(center: CLLocationCoordinate2D; radius: CLLocationDistance; identifier: NSSTRING): Pointer; cdecl;

然而,当我使用它时,我在 ios 10 下有一个 AV(但它在 ios 9 上工作) :(

如果我用 Pointer 替换 NSString 那么它在 IOS 10 上工作但我不明白为什么......

注意:这很奇怪,因为在 delphi 中,每个 (NSString *) 都被翻译为 NSString 并且它工作正常,除了 CLRegion.initCircularRegionWithCenter(在 ios10/64 位下),我真的很想知道为什么。 https://quality.embarcadero.com/browse/RSP-15717http://delphiworlds.com/2016/07/region-monitoring-background-ios/

最佳答案

这是一个 Objective-C 桥接问题,它在 32 位支持下工作正常,CLRegion 的 header 翻译是正确的。问题在于该桥无法正确支持 64 位支持,Objective-C 运行时 ABI 对于 32 位和 64 位支持是不同的。为澄清起见,正确的用法是 NSString :),桥将负责为您提取句柄(指向由 Objective-C 运行时创建的对象的指针),它是信息传递给 Objective-C 运行时,在当前设计中,句柄提取是通过以下方式完成的:

Handle := (DelphiObject as ILocalObject).GetObjectID

或从 Macapi.Helpers.pas 调用以下函数:

function NSObjectToID(const AObject: NSObject): Pointer;

Dave Nottage 的建议有效,因为您现在绕过了提取句柄的桥接工作,直接传递了它。这正是桥梁在其工作中失败的地方。我们不需要在这里转到低级别的 Pointer 类型,对于我们的桥梁,Delphi 等效于 Objective-C 的 NSString *NSString 界面。

更多详细信息,请参阅 ( https://quality.embarcadero.com/browse/RSP-15717 )。谢谢:)

关于ios - (NSString *) 它是指针还是 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402118/

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