小编Isa*_*erg的帖子

Xcode 14 弃用了位码 - 但为什么呢?

Xcode 14 Beta 发行说明已经发布,这一切都归功于一年一度的 WWDC。

可惜的是,Bitcode 现已被弃用,如果您尝试启用它,您将收到一条警告消息。

我想知道为什么会发生这种情况?使用 Bitcode 有什么缺点吗?苹果维护它是否有些痛苦?现在每个 iPhone 型号的编译将如何运行?

xcode ios bitcode xcode14

131
推荐指数
3
解决办法
3万
查看次数

Xcode 13.2 中宣布针对 iOS 13 的 Swift Concurrency - 他们是如何实现这一目标的?

Xcode 13.2 Beta 发行说明承诺支持 iOS 13 的 Swift 并发。

您现在可以在部署到 macOS 10.15、iOS 13、tvOS 13 和 watchOS 6 或更高版本的应用程序中使用 Swift Concurrency。此支持包括异步/等待、参与者、全局参与者、结构化并发和任务 API。(70738378)

然而,早在 2021 年夏季,当它首次出现在 WWDC 上时,就很难限制它只能在 iOS 15+ 上运行。

我的问题是:什么改变了?他们是如何实现向后兼容的?它的运行方式是否与 iOS 15 中的运行方式有很大不同?

concurrency xcode ios async-await swift

12
推荐指数
1
解决办法
4139
查看次数

Swift:如何将“completion”包装到异步/等待中?

我有一个基于回调的 API。

func start(_ completion: @escaping () -> Void)
Run Code Online (Sandbox Code Playgroud)

我想在该 API 之上编写一个 async/await 包装器,将实现推迟到基于原始回调的 API。

func start() async {
    let task = Task()
    start { 
        task.fulfill()
    }
    
    return await task
}
Run Code Online (Sandbox Code Playgroud)

显然,这段代码没有连接 - 它不是真实的,. 上没有fulfill方法Task

问题:有没有办法在 Swift 中使用非结构化并发来帮助我实现这一目标?

asynchronous async-await swift swift-concurrency

7
推荐指数
1
解决办法
7715
查看次数

对象如何变得像 Javascript 中的函数一样可调用?

那么只要 Javascript 中的任何东西实际上都是对象,那么是什么让对象表现得像函数呢?哪些内部属性和标签使对象表现得像我们可以调用的对象,而不仅仅是用它来存储值?

javascript

5
推荐指数
1
解决办法
2305
查看次数

为什么使用结构会增加应用程序的二进制大小?

在GitHub上有一个颇受欢迎的仓库,名为Bohdan Orlov的iOS技能矩阵。
在“内存”行的“中间”列中,它指出

结构增加二进制大小

自半年多以来,我一直在第一次看到这个声明,自从我一直想知道它是否正确,如果是的话,为什么会这样呢?它与结构在函数调用中被复制的事实有关系吗?

BohdanOrlov / ios-skills-matrix

struct compilation filesize swift

4
推荐指数
1
解决办法
583
查看次数

哈希函数切换字符串

我正在尝试在散列的帮助下在 C++ 中切换字符串。它在我和这段代码之间变得很私人,所以我不想放弃并使用枚举,即使我最终只有 8 个字符串可以放在 switch case 中。

结合我在其他主题上看到的,我写了这个非常简单并且不太可靠的函数,但是对于我想做的事情来说已经足够了,因为它不专业。

我的功能:

constexpr long hashstr (const string &str, int h=0)
{
    return !str[h] ? 55 : ( hashstr(str, h+1) *33) + (unsigned char)str[h];
}
Run Code Online (Sandbox Code Playgroud)

然后我在这个非常简单的 main 函数中调用它(现在),但它不会编译,告诉我情况是错误的(不是一个常量)。我不明白这个问题,对于我来说 arg 中的字符串是一个常量,加上函数返回一个常量表达式。

我的主要:

int main (void) {

    string teststr;
    cout << "test string :::>  ";
    cin >> teststr;
    int tt = hashstr(teststr);
    cout << "res -->  " << tt << endl;

    switch ( hashstr(teststr) )
    {
    case hashstr("rosathefloridaturtle") :
        cout << "ROSA OK" << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ hash

3
推荐指数
1
解决办法
177
查看次数

这两个字符串分配等效吗?

我看到这个人,他写了这段代码:

func foo1() *string {
    var pointa *string
    pointa = new(string)
    *pointa = "stuff"
    return pointa
}
Run Code Online (Sandbox Code Playgroud)

非常好,非常好,但是,不禁注意到,人们还可以写:

func foo2() *string {
    var pointa *string
    var str = "stuff"
    pointa = &str
    return pointa
}
Run Code Online (Sandbox Code Playgroud)

第一个代码说:

  • 动态分配具有空底层存储的字符串容器
  • 使用该文字的内容覆盖底层存储
  • 我假设,由于 COW,底层存储仅指向 ELF 数据段中的文字数据

第二个代码说:

  • 本地分配字符串的实例
  • 但因为稍后它会通过引用逃逸作用域&,所以它将被动态分配
  • 尽管如此,由于 COW,不会发生任何复制

我的这些假设正确吗?这两个动态字符串分配等效吗?第二个代码中到底发生了什么new(string); *pointer = "payload",但在幕后,隐式发生了什么?

这些代码片段会产生与分配和初始化字符串相同的代码吗?

string go dynamic-memory-allocation

-1
推荐指数
1
解决办法
77
查看次数