Swift 使用 NSTimer 时无法输出

2023-11-30

我尝试每秒输出到 STDOUT 通过使用NSTimer.

我编写了以下代码并将其保存为sample.swift。

#!/usr/bin/swift

import AppKit

class Foo : NSObject {
  override init() {
    super.init()
    NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "bar", userInfo: nil, repeats: true)
  }

  func bar() {
    print("buz")
  }
}

let h = Foo()

// Output successful
// while true {
//   print("Foo!")
// }

NSRunLoop.mainRunLoop().run()

然后,我执行了以下命令,可以看到buz.

okada@iyokan$ ./sample.swift
buz
buz
buz
buz

所以,我执行了以下命令,但我看不到任何buz.

okada@iyokan$ ./sample.swift > sample.log # wait 5 seconds
okada@iyokan$ cat sample.log
okada@iyokan$ 

顺便说一句,我尝试了 while 循环版本(激活注释掉上面的代码)然后我可以得到buz通过两个程序。

为什么我无法得到任何buz? 请教我。


这是 stdio 库的“正常”行为。文件描述符 可以“缓冲”,这意味着所有的结果printf()和 其他输出操作首先进入内部缓冲区。当那个 缓冲区达到一定大小(例如8KB),其内容被写入实际 文件。

共有三种模式: “无缓冲”(所有输出都写入文件 立即),“行缓冲”(收集输出,直到出现换行符 字符被打印), 和“完全缓冲”。

根据默认情况下,stdout 行是缓冲的、无缓冲的还是不确定的?:

Unix 约定是 stdin 和 stdout 在与终端关联时是行缓冲的,否则是完全缓冲的(也称为块缓冲)。

这解释了为什么您会看到每个打印操作的输出 当输出到达终端时立即,但不是当 输出被重定向到文件。

With

print("buz")
fflush(stdout)

您可以强制将输出立即写入文件。 或者,您可以将标准输出设置为行缓冲模式 通过致电

setlinebuf(stdout)

在打印任何内容之前。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 使用 NSTimer 时无法输出 的相关文章

  • Core Data + CloudKit 无法在其他设备上自动刷新?

    我的 SwiftUI 应用程序与 Core Data CloudKit 一起使用 我可以从 Mac 或 iPhone 将新条目保存到数据库中 该应用程序对所有设备使用完全相同的项目 代码库 唯一的问题是我需要关闭应用程序并重新打开它才能查看
  • 在 swift 中使用协议作为数组类型和函数参数

    我想创建一个可以存储符合某种协议的对象的类 对象应该存储在类型数组中 根据 Swift 文档 协议可以用作类型 因为它是一种类型 所以您可以在许多允许其他类型的地方使用协议 包括 作为函数 方法或初始值设定项中的参数类型或返回类型 作为常量
  • 检查 switch 语句中的可用性

    if a Enum输入添加新的case在新的操作系统版本中 如何检查可用性switch陈述 像一个Enum in StoreKit below public enum Code Int public typealias ErrorType
  • 按钮图像未显示在 UItextfield 的 rightView 中

    我创建了一个按钮图像 并使用 Sa wift 将其放置在 UITextField 密码 的 rightView 上 我想在密码字段中创建切换按钮隐藏 显示安全文本 右视图中显示的图像 Code func passwordToggleButt
  • 搜索结果中的 Swift 搜索结果控制器连接到另一个视图控制器

    Problem 我有一个表格视图 用户可以滚动查找某些内容或使用搜索栏 搜索栏不是使用 StoryBoard 创建的 我的观点有一个UISearchController处理搜索栏和搜索结果更新 我遇到的问题是 自从我SearchResult
  • 应用程序图标上的快捷方式项目不适用于 iOS 13

    为了支持应用程序图标上的快捷方式项目 我们在中实现了以下方法SceneDelegate func windowScene windowScene UIWindowScene performActionFor shortcutItem UIA
  • 使用 Codable 将字符串编码/解码为整数,并在其间使用函数

    我有这个 json 字符串 let json name Wendy Carlos hexA 7AE147AF hexB 851EB851 let data Data json utf8 我想使用 Codable 对该结构进行编码 或返回 s
  • 免费套餐于今天 11 月 28 日结束,Heroku 网站于今天删除 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我的 Heroku 网站已被删除 因为我没有切换到付费计划 我刚刚切换到 Eco Dyno 我的网站会自动恢复还是需要重建 注意 使用 He
  • 无效的 Swift 支持 - 文件位置不正确

    我一直在尝试将新版本上传到 iTunes Connect 来更新应用程序 我第一次使用 xCode 6 但收到了一封来自 Apple 的电子邮件 内容如下 亲爱的开发者 我们发现您最近交付的 应用程序 存在一个或多个问题 要处理您的交货 必
  • 防止 Realm 在更新对象时覆盖属性

    我已经在 iOS 中设置了一个 REST API 来连接领域对象 然而 我发现在我的对象中创建最喜欢的标志存在问题 我创建了一个最喜欢的布尔值 但是每次从 API 更新该对象时 它都会再次将最喜欢的值设置为默认 false 在这里 我希望这
  • Swift MKAnnotationView 旋转

    我试图在坐标更改时旋转我的自定义注释 我可以成功地更改坐标 但尝试了一切方法来旋转它 但没有成功 基本思想是有一个平面并通过旋转设置其方向 这是我的代码 import UIKit import MapKit class CustomPoin
  • 将 swift 结构体转换为 json 字符串

    我正在尝试将我的 swift 结构转换为 json 格式 类似这样的问题似乎有不少 但到目前为止 没有一个解决方案对我有用 这是我的结构 struct Rec Codable var name String var time Int var
  • 将 3D 对象添加到 ARGeoAnchor

    如果这个问题不太好 请原谅我 我在 Apple 的 ARGeoAnchor 文档中遇到了一些障碍 目前 ARGeoAnchor 仅在 AR 场景视图中显示一个蓝点 我正在尝试显示任何 3D 渲染或对象 My code let coordin
  • Swift 中的条件导入

    我有一个在各种应用程序中使用的日志功能 由于我在整个应用程序中使用它 因此也可以方便地进行 Crashlytics 日志记录调用 然而 并非每个应用程序都使用 Crashlytics 在 Objective C 中 您可以使用预处理器条件来
  • 无法更改 UITabBarItem.image:CSI 中不支持的像素格式

    我试图通过代码更改选项卡栏中显示的图像 我目前正在使用 Swift 和 Xcode 6 beta 3 我导入了 tabBarImage png 并 电子邮件受保护 cdn cgi l email protection在 Images xca
  • ScrollView 内的 SwiftUI 列表

    我想将列表放在 ScrollView 中 以便可以一起滚动列表行和标题 但我发现 ScrollView 中的 List 不起作用 它什么也没显示 我应该同时使用它们 我应该使用 ScrollView 这样当我滚动行时 我可以使标题 图像或文
  • 检查是否安装了 Google 地图 - iOS 10.2.1

    我刚刚将手机升级到 iOS 10 2 1 在我的 Swift 应用程序 使用 3 0 中 我试图检查手机上是否安装了 Google 地图 如果是 请在 Google 地图中打开该地址 UIApplication shared canOpen
  • 缩进 UILabel 的第二行(swift)

    var testLabel UILabel frame CGRectMake 8 0 tableView frame width 8 100 let testDesc dsfdddfdsfdsfsdfdsfdsfdsfdsfdsfsdfds
  • 何时使用 takeUnretainedValue() 或 takeRetainedValue() 来检索 Swift 中的非托管对象?

    根据将 Swift 与 Cocoa 和 Objective C 结合使用 https developer apple com library prerelease ios documentation Swift Conceptual Bui
  • 将 Unmanaged 与 nil 进行比较

    代码是从这篇博客文章复制的 http matthewpalmer net blog 2014 06 21 example ios keychain swift save query http matthewpalmer net blog 2

随机推荐