Tag: objective c

如何在没有解析器生成器的情况下在C或Objective-C中编写解析器?

我试图在C或Objective-C中创建一个接受字符串的计算器 8/2+4(3*9)^2 并返回答案2920.我不想使用像Lex或Yacc这样的生成器,所以我想从头开始编写代码。 我该怎么做呢? 除了龙书,是否有任何推荐的文本涵盖这个主题?

C / Objective C中的switch语句

我是Objective-C的新手,但是从我所知道的关于switch语句的所有内容来看,下面的代码不应该打印任何内容,因为对我来说似乎应该有编译错误。 但是打印出2。 我不懂为什么。 有人可以解释一下吗? – (void) test { int myVar = 2; switch (myVar) { case 1: { NSLog(@”result: %d”, myVar); break; case 2: { NSLog(@”result: %d”, myVar); } break; } } }

C代码运行得更快吗?

从Objective-C调用C代码是否有任何性能提升? 我读过某个地方,与使用函数调用的其他语言相比,消息传递速度较慢。 因此,如果我从Objective-C代码调用C函数,我是否避免了消息传递开销? 在优化性能时,是否建议使用C语言编写最关键的函数和过程而不是使用Objective-C对象? 编辑: 鉴于有关过早优化和代码可读性的警告的数量,我想澄清我没有考虑常规应用程序,但非常具体的应用程序,如: 图像 加密或压缩算法。 数学 通常,函数或过程不需要OO设计,并且打算使用参数多次调用。

在ObjectiveC中使用指针的最大优势是什么?

我意识到99%的人认为“这是什么……”但请帮助我理解使用pointers这个概念。 我相信我的具体问题可以帮助很多新手。 我理解指针是什么,它们是对内存中地址的引用,通过使用(*)运算符,您可以获取该地址中的值。 让我们说: int counter = 10; int *somePointer = &counter; 现在我在counter内存中有地址,我可以通过这样做间接指出它的值: int x = *somePointer; 这使x = 10 ,对吧? 但这是最基本的例子,对于这种情况我可以使用int x = counter; 并获得该值,所以请解释为什么指针在Objective-C和其他一些语言中确实是如此重要…在什么情况下只有指针才有意义? 欣赏它。

用Objective-C包装C库 – function指针

我正在Objective-C中编写一个C库的包装器。 该库允许我在发生某些事件时注册回调函数。 register_callback_handler()函数将函数指针作为参数之一。 我对你的编程大师的问题是:我怎样才能将Objective-C方法调用/选择器表示为函数指针? NSInvocation会在这种情况下有用吗还是太高级别? 我是否会更好地编写一个在其中编写方法调用的C函数,然后将指针传递给该函数? 任何帮助都会很棒,谢谢。

如何使用带有“未使用变量”警告的类型常量?

我正在使用Xcode 4.6,我有一个头文件,其中包含我在整个代码中使用的一些常量。 我不想使用预处理程序指令,因为我希望它们能够正确输入等等。 例如,我在我的一个.h文件中有这个代码: static NSString *kErrorCannotDivideByZero = @”Error: Cannot divide by zero”; 我在相应的.m文件中使用它: [self showToast:kErrorCannotDivideByZero]; 我收到警告: /path/to/my/headerFile.h:32:18: Unused variable ‘kErrorCannotDivideByZero’ 我知道这只是一个警告,但我有大约50个这些警告堵塞了我的编译器输出。 为什么我收到此警告以及如何正确解决此问题? 我对简单地压制所有未使用的变量警告并不感兴趣,因为我确实希望得到合法的警告。

用于解析PSD文件的API

我正在尝试解析Photoshop PSD文件,我想提取图层信息,包括文本。 Objective-C中是否有任何API可以帮助我从PSD文件中提取这些信息?

有没有办法显示LLVM自动矢量化的位置?

上下文:我在Objective-C库中有几个循环,它处理大型文本数组。 我现在可以看到它以单线程方式运行。 据我所知,LLVM现在能够自动矢量化循环,如Apple在WWDC会议上所述。 然而,它的方式非常谨慎,其中一个原因是由于CPU流水线操作而导致变量被修改的可能性。 我的问题:我怎样才能看到LLVM在哪里对我的代码进行了矢量化,更有用的是,我如何才能收到解释为什么它无法对我的代码进行矢量化的调试消息? 我敢肯定,如果它能看出为什么它不能自动矢量化它,它可以指出我,我可以进行必要的手动调整,使其可以矢量化。 如果我没有指出这个问题已经或多或少已经被问过,而且非常迟钝,我会在这里失职。

的示例

我找不到方法的有效例子[NSDictionary getObjects:andKeys:] 。 我能找到的唯一例子 ,不编译。 我提供了错误/警告,以防有人搜索它们。 我感到困惑的原因是因为NSDictionary上的大多数方法都返回NSArray 。 但是,在文档中它声明此方法的out变量作为C数组返回。 以下是您按照链接示例可能获得的错误消息/警告: NSDictionary *myDictionary = …; id objects[]; // Error: Array size missing in ‘objects’ id keys[]; // Error: Array size missing in ‘keys’ [myDictionary getObjects:&objects andKeys:&keys]; for (int i = 0; i < count; i++) { id obj = objects[i]; id key = keys[i]; } 。 […]

在Cocoa / Objective-C中创建监视程序的原因和方法

祝大家周一愉快! 这是我的情况。 任何帮助非常感谢! 我创建了一个可执行文件,安装后可以放在机器的Launch Agents文件夹中。 理论上它应该永久运行,每秒收集一次数据。 它可以在机器处于睡眠状态时停止,但在重新启动计算机时重新启动。 这是我的问题: 有时程序会自动停止 ,通常是在运行几天之后。 如果重新启动计算机,程序将重新启动并再次运行一段时间,然后才会出现同样的问题。 我不知道这个问题的原因,但朋友告诉我,我可以创建一个“看门狗”,每分钟检查我的可执行文件是否正在运行。 如果不是,则监视程序将重新启动可执行文件。 有关如何做到这一点的任何指示? 我的应用程序是用Objective-C和Cocoa编写的,可以在Mac上运行。 非常感谢! 编辑1 我将尽我所能解释该应用程序是如何工作的。 它基本上是用C和Objective C编写的方法的集合,每秒查询有关系统的信息: -bytes传输 – 键盘活动 – – 小鼠活动 – – 硬盘的百分比用完了 – 具有键盘焦点的进程 …等等。 它使用Apple Developer网站提供的低级API来完成此操作。 它每秒将信息写入文件。 每小时压缩文件并创建一个新文件。 请询问是否需要更多说明:) 编辑2 对于那些想知道的人,这里是plist文件 Label com.Intel OnDemand ProgramArguments /Library/LaunchAgents/Contents/Intel RunAtLoad 再次感谢….