小编Tho*_*ann的帖子

基于C++堆栈的构造函数/析构函数不能按预期工作

我无法理解为什么以下代码不构造和破坏我创建的两个对象,我期望的方式:

#include <iostream>

class MyClass {

    int myVar;

public:
    MyClass(int x) {
        myVar = x;
        std::cout << "constructing " << myVar << ", " << (long)this << std::endl;
    }

    ~MyClass() {
        std::cout << "destructing " << myVar << ", " << (long)this << std::endl;
    }
};

int main(int argc, const char * argv[])
{
    MyClass a = MyClass(1);
    a = MyClass(2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为在main中我首先创建一个值为1的对象,然后创建一个值为2的新对象.每个对象都被构造和销毁,所以我希望看到以下输出:

constructing 1, 3456
constructing 2, 6789
destructing 1, 3456
destructing 2, 6789
Run Code Online (Sandbox Code Playgroud)

但是,我明白了:

constructing 1, …
Run Code Online (Sandbox Code Playgroud)

c++

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

如何区分哪些 Unicode 字符是字母(单词),哪些是标点符号?

我想检测文本中的单词,即我需要知道给定文本中的哪些字符是字母,即它们可以是(口语)单词的一部分,另一方面,哪些字符是标点符号等。

\n\n

例如,在上面的句子中,“我”、“想要”和“i”和“e”是这方面的单词,而空格“。” 和逗号则不是。

\n\n

这样做的困难在于我希望能够读取任何类型的基于 Unicode 的脚本。例如,德语单词“sch\xc3\xb6n”是一个单词。但希腊语、阿拉伯语或日语又如何呢?

\n\n

因此,我需要一个表格或列表,指定可以形成单词的所有字符范围。或者,我还想知道哪些字符是可以形成数字的数字(假设其他脚本具有与阿拉伯数字类似的编号方案)。

\n\n

我需要这个用于 Mac OS X、Windows 和 Linux。我将编写一个 C 应用程序,因此它需要是一个操作系统库或一个完整的代码/数据解决方案,我可以将其转换为 C。

\n\n

我知道Mac OS(Cocoa)提供了用于此目的的功能,但我不确定Win和Linux是否有类似的解决方案(可能是基于gtk?)。

\n\n

或者,如果我有完整的表格,我可以编写自己的代码。

\n\n

我找到了 unicode 图表(http://unicode.org/charts/index.html#scripts),但这并不是我可以在编程中使用的一种方便的形式。

\n\n

那么,有人可以告诉我 Windows 和 Linux 是否有用于此目的的函数,或者我在哪里可以找到 unicode 中单词字符的完整表/列表?

\n

unicode text

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

为什么NSInvocation getReturnValue:丢失对象?

我需要你的帮助.我在NSInvocation'getReturnValue:'方法中遇到了一些问题.我想以编程方式创建UIButton,甚至更多,我想使用NSInvocation动态创建它,并通过NSArray传递值(这就是我包装UIButtonTypeRoundedRect的原因).

清单.

NSLog(@"Button 4 pushed\n");//this code executed when button pushed
Class cls = NSClassFromString(@"UIButton");//if exists {define class},else cls=nil
SEL msel = @selector(buttonWithType:);
//id pushButton5 = [cls performSelector:msel withObject:UIButtonTypeRoundedRect];//this code works correctly,but I want to do this by NSInvocation
//---------------------------
NSMethodSignature *msignatureTMP;
NSInvocation *anInvocationTMP;

msignatureTMP = [cls methodSignatureForSelector:msel];
anInvocationTMP = [NSInvocation invocationWithMethodSignature:msignatureTMP];
[anInvocationTMP setTarget:cls];
[anInvocationTMP setSelector:msel];

UIButtonType uibt_ = UIButtonTypeRoundedRect;
NSNumber *uibt = [NSNumber numberWithUnsignedInt:uibt_];
NSArray *paramsTMP;
paramsTMP= [NSArray arrayWithObjects:uibt,nil];

id currentValTMP = [paramsTMP objectAtIndex:0];//getParam from NSArray
NSInteger i=2;
void* bufferTMP; …
Run Code Online (Sandbox Code Playgroud)

pointers objective-c nsinvocation

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

有没有办法让 NULL 表现得像 0(零)或 SQL 中的空字符串?

假设有一个带有整数列的 sqlite 数据库。

现在,整数字段往往也包含 NULL 值(=未设置)。

在对该字段进行查询时,我想将 NULL 值解释为零 (0)。

有没有办法告诉 sqlite 在这种情况下我喜欢像 0 一样处理 NULL,特别是当我使用 SELECT 语句进行比较时?

由于我在类似 C 的代码中动态构造查询,因此我希望能够编写如下内容:

query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
Run Code Online (Sandbox Code Playgroud)

目前,我使用以下代码解决了这个问题,我想避免这样做:

if (anIntValue == 0) {
  query = "SELECT * FROM tbl WHERE intField IS NULL OR intField=0"
} else {
  query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
}
Run Code Online (Sandbox Code Playgroud)

也许我可以在查询中使用一个运算符将 NULL 转换为我指定的其他值?

当然,另一种方法是确保该字段中永远不会出现 NULL 值,但人们可能希望能够知道该值何时尚未设置,所以我希望能够保留数据库中的 NULL 值。

sql sqlite

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

Swift:单个guard语句中的嵌套选项

我试图保护从字符串到Float到Int的转换:

guard let v = Int (Float("x")) else {
    return -1
}
Run Code Online (Sandbox Code Playgroud)

swift 3编译器抱怨:

可选类型'Float?'的值 没有打开; 你的意思是用'!' 要么 '?'?

添加"?" 但是没有帮助.并且"!" 这里会错的,不是吗?

是否有可能解决这个问题,而不必使用两行或两个保护声明?

optional swift

3
推荐指数
2
解决办法
1162
查看次数

为 macOS 开发用户空间只读磁盘驱动程序

我有一种特殊的磁盘映像格式(已压缩并带有坏块等额外信息),并希望将其作为/dev/rdiskmacOS 中的块设备使用(例如在 下)。

我正在寻找有关如何编写只读块级用户空间驱动程序的指针。

我相信我需要使用 IOKit 来完成此操作,但该领域的文档非常稀疏,并且据我所知没有提供任何示例代码。

我看过 Amit Singh 的Mac OS Internals,但这仅涉及过滤通过添加的驱动程序路由的现有块。但我需要从单独的文件中读取数据,即我需要使用文件系统,如果可能的话,我也想在用户空间应用程序中执行此操作,因为制作 kext 既难以调试,而且现在也已被弃用。

理想情况下,这应该适用于当前的 macOS 版本,包括 10.15,但我也对仅适用于较旧的 macOS 版本(从 10.6 开始)的解决方案感到满意。

也许我仍然误解了这里的一些事情。我的印象是,甚至在 10.15 之前就可以编写用户空间 IOKit 驱动程序。但对于块存储设备来说这可能是不可能的吗?欢迎任何澄清。我感觉很失落。

2020 年 6 月 22 日更新

我还在 OSXFUSE 支持论坛上提出了这个问题,并得到了否定的答复

macos disk iokit

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

确定 macOS 中的 CPU 类型/架构

随着即将推出的 Apple Silicon 硬件,一些应用程序可能想要确定 CPU 是 Intel 还是 Apple 的。

哪些 API 和系统调用可以提供该信息?

正如@MarkSetcell指出的sysctl -a可以提供一些信息。对于 DTK (macOS 11b3),它返回:

machdep.cpu.brand_string: Apple processor
Run Code Online (Sandbox Code Playgroud)

OTOH,苹果的System Profiler.app节目:

Processor Name: Apple A12Z Bionic
Run Code Online (Sandbox Code Playgroud)

我喜欢有类似的结果,即“Apple A12Z Bionic”而不是“Apple 处理器”。

在系统卷上快速搜索“Apple A12Z Bionic”显示它出现在“dyld_shared_cache_arm64e”中的某个位置,但不在内部System Profiler.app,这表明该字符串是由框架函数传递的,而不是在 Profiler 应用程序中硬编码的。因此,我希望找到提供这个更具描述性名称的系统调用。

macos apple-silicon

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

Xcode,Instruments:如何找到越来越多的泄漏对象?

很难解释我在主题行中需要什么.如果您有更好的想法,请随时编辑它.

问题如下:

iOS应用程序一次只能处理一个文档.每次关闭文档并打开一个新文档,即使它是相同的文档,内存使用量也会不断增加,并且总是以相同的数量增加.

所以有泄漏.代码不会释放(释放)某些东西.也许它是一个数组,它添加对文档项的引用,并且永远不会被清除,尽管它应该.

当然,泄漏工具在这里没有帮助,因为它都是"正确的"(它只能找到没有所有者的分配).

我如何使用Instruments(或dtrace)现在找到这个bugger?如果我可以简单地在仪器中识别其中一个未添加的对象,那将会有所帮助,其余的将很容易.

到目前为止,我一直在使用Allocations工具,将检查范围设置为旧文档关闭和新文档打开时的时间.尽管如此,这显示了数以千计的对象,其中只有一个是从前一个文档遗留下来的对象,尽管它不应该仍然存在.我需要识别的那个对象.

我想我需要的是Allocations工具中的一个功能,它减去刚刚添加的所有分配,并且还减去启动后存在的所有分配 - 剩下的是由新文档创建但从那时起未发布的项目.有没有办法获取收集的对象集合,将它们分组并设置这样的操作?可能不是.

每次打开文档时都会创建大约20000个对象,并且涉及大约50个源文件,通过查看源代码或手动检查所有对象是不可行的.

哦,静态分析仪也无济于事.

iphone xcode memory-leaks instruments ios

2
推荐指数
1
解决办法
1759
查看次数

如何从Xcode中的Shell脚本文件运行脚本?

我已经创建了一个外壳脚本文件builscript.sh,并希望在Xcode构建过程中运行它。这是我在Xcode中的配置

构建设置

但是,当我尝试构建项目脚本时,它无法运行。

shell xcode

2
推荐指数
1
解决办法
2175
查看次数

如何以编程方式在 macOS 上加密 PDF 文件

我的软件使用内置 API (PDFKit) 生成 PDF 文件。

我现在需要以编程方式从中创建一个受密码保护(通过加密)的 PDF 文件。PDFKit 似乎不支持。

我曾希望我可以使用 AppleScript 告诉 Preview 打开 PDF,然后用密码保存它,但似乎 Preview 的 AppleScript 字典没有提供选项。

我有哪些选择?

pdf encryption macos

2
推荐指数
1
解决办法
864
查看次数