V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ShikiSuen  ›  全部回复第 10 页 / 共 48 页
回复总数  960
1 ... 6  7  8  9  10  11  12  13  14  15 ... 48  
322 天前
回复了 chenxiankong 创建的主题 macOS macos14 解决中文输入法卡顿的问题了吗?
@chenxiankong 我是威注音输入法的作者,不过暂时没有条件来完成你说的必现步骤。
欢迎您也测试一下威注音输入法,看看是否是这样。
@mmdsun 我没用过 MAUI ,只用过 SwiftUI 。
有机会我会体验一下看看。
@shawndev 今天刚刚换了 JSON ,读取速度比 Plist 慢了一倍(原先一秒,现在两秒)。
但整个记忆体占用量下降了,且档案体积也小了不少(因为索引由 UTF16 变成 UTF8 )。

感谢推荐 LevelDB ,回头我再研究一下。
@maxmak 太谢谢了。这输入法原厂辞典有简体中文与繁体中文两种(我不信任繁简转换,因为一定会出错),每个辞典 plist 不到 12MB 。
敢情这是在就银行口座管理领域向日本看齐?
V2EX 的贴文无法更新,所以我在稀土掘金也放了一份。
https://juejin.cn/post/7236196894988369957/
@neptuno V2EX 回帖无法使用 markdown ,我另开一个讨论串了:

https://v2ex.com/t/942237#reply0
@neptuno

你说多切几次就正常了,我想起了原因。

如果切到输入法的时候、输入法正在运行、且有对当前 IMKTextInput Client 创建控制会话副本、且该副本正常的话,执行的会是 这个副本的 setValue(),传入的参数是当前输入法安装副本的 identifier (有些输入法会有多个安装副本,对应不同的输入模式,比如系统内建简体中文输入法就有全拼或双拼模式、内建繁体中文输入法会有注音或仓颉模式,等)。setValue 在被呼叫的时候,如果发现这个控制会话副本没有被正确 activateServer 的话,可能会重新 activateServer() 一遍。

如果切到输入法的时候、输入法尚未运行(或尚未对当前 IMKTextInput Client 创建控制会话副本)的话,会启动副本。但此时因为副本是直接 init() 的,没有跑 activateServer(),所以无法视为正常启动,输入法自然也就无法正常工作、需要你重新切一下。

怎么说呢,activateServer() 实际上是 IMKInputController 的两个建构子( Constructor )之一。很多 macOS 副厂输入法开发者不知道这玩意另有这么一个不需要任何参数的建构子。

很多 mac 平台的输入法都需要一个扩充设计、来应对这个情况。我开发的威注音输入法对此的应对策略是这样的:

一、给 IMKInputController 另写一个共用的建构子:

```
/// 所有建構子都會執行的共用部分,在 super.init() 之後執行。
private func construct(client theClient: (IMKTextInput & NSObjectProtocol)? = nil) {
DispatchQueue.main.async { [self] in
// 威注音限定:设定 inputHandler 以及同步核心词库偏好设定。
inputHandler = InputHandler(
lm: LMMgr.currentLM, uom: LMMgr.currentUOM, pref: PrefMgr.shared
)
inputHandler?.delegate = self
syncBaseLMPrefs() // 同步核心词库偏好设定。

// 所有输入法共用:下述兩行很有必要,否則輸入法會在手動重啟之後無法立刻生效。
let maybeClient = theClient ?? client() // 注意:这样过后仍旧是 nullable IMKTextInput 类型。
// 这里 client 是不是 nil 都无所谓,activateServer() 自己会处理:只要是 null ,就可以啥也不做(或者仅载入词库)。
activateServer(maybeClient)

// 威注音限定:GCD 會觸發 inputMode 的 didSet ,所以不用擔心。
inputMode = .init(rawValue: PrefMgr.shared.mostRecentInputMode) ?? .imeModeNULL
}
}
```

二、给 IMKInputController 实作 .init() 这个无参数的建构子。

```
/// 對用以設定委任物件的控制器型別進行初期化處理。
override public init() {
super.init()
construct(client: client())
}
```

三、让 IMKInputController 的 .init(server:delegate:client:) 这个有参数的建构子也利用 construct()。

这样区分的原因是:有参数的建构子会接收系统传入的变数;而无参数的建构子会主动读取 client()。

```
/// 對用以設定委任物件的控制器型別進行初期化處理。
///
/// inputClient 參數是客體應用側存在的用以藉由 IMKServer 伺服器向輸入法傳訊的物件。該物件始終遵守 IMKTextInput 協定。
/// - Remark: 所有由委任物件實裝的「被協定要求實裝的方法」都會有一個用來接受客體物件的參數。在 IMKInputController 內部的型別不需要接受這個參數,因為已經有「 client()」這個參數存在了。
/// - Parameters:
/// - server: IMKServer
/// - delegate: 客體物件
/// - inputClient: 用以接受輸入的客體應用物件
override public init!(server: IMKServer!, delegate: Any!, client inputClient: Any!) {
super.init(server: server, delegate: delegate, client: inputClient)
let theClient = inputClient as? (IMKTextInput & NSObjectProtocol)
construct(client: theClient)
}
```

思路大致如此。
337 天前
回复了 ShikiSuen 创建的主题 程序员 感觉没那个命花在 C++ 身上了。
找出元凶了:fixValue() 还是少写了一个返回条件………
337 天前
回复了 ShikiSuen 创建的主题 程序员 感觉没那个命花在 C++ 身上了。
妈的还是闹鬼。
commonFixWhenHandlingDynamicArrangeInputs() 这个函数似乎出了问题。
但是我仔细检查过、发现看里面写的内容跟 Swift 版都是一致的。

会不会是 hashify() 这个轮子出了问题……
337 天前
回复了 ShikiSuen 创建的主题 程序员 感觉没那个命花在 C++ 身上了。
欸不对,这实作与 Swift 版完全一致………
337 天前
回复了 ShikiSuen 创建的主题 程序员 感觉没那个命花在 C++ 身上了。
找出问题所在了:fixValue() 函式的 C++ 实作出问题了。
订正:「考虑一下」->「考虑问一下」。
上述吐槽不是针对 XHacker ,而是针对 Apple 的这些「规矩」。
这种问题可以考虑一下 XHacker ,但我不知道他是不是被公司禁止回答这些与 IMK 有关的问题。
反正我跟他提过好几次 IMK 的 Bug ,没见他有任何响应。
总觉得 Apple 狗逼规矩特别多,宁愿不解决问题、也要规避任何可能的所谓的「泄密风险」。
推测:

这些输入法(在你的电脑上)内建的 IMKInputController SubClass 的副本在 activateServer 的时候可能出了故障,导致完全无法响应。抑或是副本与 IMKTextInput Client 失联。
337 天前
回复了 ShikiSuen 创建的主题 macOS MS Edge 在 macOS 系统下的表现越来越垃圾了。
@egan0606 要是有个在同步服务方面没被墙的 chrome 替代品就好了。
Vivaldi 改太凶,我有点用不来。现在临时改用 FireFox 。
338 天前
回复了 ShikiSuen 创建的主题 程序员 这恐怕是目前最臭的 CheckSum 算法。
@Al0rid4l 0xE114_D514
338 天前
回复了 ifx0 创建的主题 macOS 讯飞推出 macos 版本的输入法了
@bs10081 因为可能只做了简体中文的 localization 。
1 ... 6  7  8  9  10  11  12  13  14  15 ... 48  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   978 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 60ms · UTC 21:00 · PVG 05:00 · LAX 14:00 · JFK 17:00
Developed with CodeLauncher
♥ Do have faith in what you're doing.