gpt4 book ai didi

ios - 离开范围时,Swift 在 CFRelease 中崩溃

转载 作者:可可西里 更新时间:2023-11-01 00:37:04 25 4
gpt4 key购买 nike

我刚刚全身心投入到 iOS 开发中,目前在 queryServer 函数末尾的 CFRelease 函数中出现运行时错误(我在突出显示的行上添加了注释)但我没有如果我注释掉对 extractIPFromQuery 的函数调用,则会出错。

下面的代码获取服务器的名称并将 IP 地址列表返回给该服务器。

func extractIPFromQuery(query: NSArray) -> [String] {
var addresses = [String]()

for x in 0...query.count - 1{
let adr = "\(query[x])"
let adrStart = adr.startIndex.advancedBy(10)
let adrEnd = adr.startIndex.advancedBy(18)
let address = adr.substringWithRange(Range<String.Index>(start: adrStart, end: adrEnd))
var final = ""

// Convert the hex version of the address into
// a human readable version

for seg in 0...3{
let start = address.startIndex.advancedBy(seg * 2)
let end = address.startIndex.advancedBy((seg * 2) + 2)
let hexRange = Range<String.Index>(start: start, end: end)
let hexPair = address.substringWithRange(hexRange)

final += "\(UInt8(strtoul(hexPair, nil, 16)))"
if(seg != 3){
final += "."
}
}

addresses.append(final)
}
return addresses;
}

func queryServer(hostName: String) -> [String]{
var ips = [String]()
if hostName != "\0" {
let hostRef = CFHostCreateWithName(kCFAllocatorDefault, hostName).takeRetainedValue()
while(CFHostStartInfoResolution(hostRef, CFHostInfoType.Addresses, nil) == false){}
ips += extractIPFromQuery(CFHostGetAddressing(hostRef, nil)!.takeRetainedValue() as NSArray)
} // Code breaks here
return ips
}

最佳答案

CFHostGetAddressing 名称中没有“Create”或“Copy”,这意味着它不会返回 (+1) 保留对象。因此,您必须使用 takeUnretainedValue() 来获取非托管引用的值。

有关这些命名约定的更多信息,请参阅“创建规则”和“获取规则”在 Ownership Policy在“Core Foundation 的内存管理编程指南”中。

关于ios - 离开范围时,Swift 在 CFRelease 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34488893/

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