问题标签 [objective-c-runtime]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ipad - 如何扩展 iWork 的 Number'09 公式?
我有一些我想编写的特定公式(也许在 Objective-C 中)并与 iPad 中 Apple iWork 套件的 Numbers'09 集成,我想知道是否有这样的方法?
objective-c - 如何在 Objective-C 运行时创建协议?
首先,我想明确一点,我不是在谈论定义协议,并且我理解协议的概念
我知道Obj-C 运行时允许在 RUNTIME 创建类,以及它的 ivars 和方法。也可用于创建的是 SEL-s。我想我只是遗漏了一些东西,但有谁知道在运行时调用什么函数来创建协议?这样做的主要原因是为了 conformsToProtocol: 工作,所以仅仅添加适当的方法并不能真正削减它。
objective-c - 目标 C:方法知道调用它的上下文吗?
我想要一个可重用的日志记录方法或函数,它可以吐出调用它的方法的名称。例子:
iphone - 在 iPhone 上运行时解释 Objective C 脚本?
无论如何在运行时加载一个目标 c 脚本,并针对当前 iPhone 应用程序中的类/方法/对象/函数运行它?
主要注意事项:我想这样做的主要原因是允许我快速构建应用程序原型,然后在完成主要原型设计阶段后,获取我正在编写的脚本并在构建时编译它们。我从不打算发布一个带有客观 c 解释器的应用程序。
我问的原因是我一直在玩iPhone 蜡,一个可以嵌入到 iPhone 应用程序中的 lua 解释器,它工作得非常好,因为在你的目标中公开可用的任何对象/方法/函数C 代码是自动桥接的,并且在 lua 中可用。
这允许您通过简单地将应用程序的核心设置为用户文档目录中的 lua 文件来快速构建应用程序原型。只需重新加载应用程序,您就可以测试对 lua 文件的更改,而无需在 XCode 中重新构建应用程序 - 节省大量时间!
但是,对于 Apple 最近 3.1.3 SDK 的东西,它让我想到,进行这种类型的快速原型制作最安全的方法是如果你可以使用 Objective C 作为解释代码......那样,最坏的情况下,你可以只需在发布之前将其编译到您的应用程序中即可。我听说 lua 源可以编译为字节码,并在构建时链接,但我认为最终安全的事情是脚本源是在目标 c 中,而不是 lua。这样,您的来源始终处于目标 c 中,无论如何。
这让我想知道(我已经搜索过,但一无所获)是否有任何关于如何在 iPhone 应用程序中嵌入 Objective C 解释器的示例?这将允许您针对构建在二进制文件中的当前类快速构建您的应用程序原型,并且当您即将部署您的应用程序时,而不是通过应用程序内解释器运行这些类,而是编译它们。
在 iPad 和 OS 4 中,蓝牙和虚拟键盘可以与 iPhone 和 iPad 一起使用……这将使这种快速原型设计变得更加有用,至少在开发时间是这样。例如,如果您的应用程序中内置了解释器并在 iPad 上安装了它,那么您可以在旅途中针对解释器进行编码,而无需 XCode。对我来说,让源代码回到“苹果批准”状态的最有用的方法是脚本是否是 Objective C。
objective-c - 在 iPhoneOS 中寻找 marg_setValue 修复
我正在尝试编译一个最初为 Cocoa 编写的库。在它寻找函数 marg_setValue() 之前,一切都很好。它说在 char in 之前有语法错误
(这是在谈论第三个论点,而不是 (char) )
我正在尝试将 LuaObjectiveCBridge 移植到 iPhone。它有两种选择,使用 Runtime 或 Foundation。我发现基础存在一些问题,所以我正在尝试运行时。但是编译器不合作。
objective-c-runtime - 可变参数函数 - 调用 [obj release] 时的 EXC_BAD_ACCESS;
我有以下方法:
(void)makeString:(NSString *)str1,... {
}
我最终会读到Objective C Memory Management,我相信我会在其中找到答案——可能与指针和复制有关——但是现在,如果我添加[innerText release],任何人都可以解释为什么;作为这个函数的最后一行,我在运行时得到一个 EXC_BAD_ACCESS 错误?
objective-c - GNU Objective-C 运行时诡计
我可以在 GNU Objective-C 运行时中将半任意数据片段附加到实例变量吗?
挑战:
我目前正在研究一种类似于 Linux 的 Cocoa,作为一种宠物项目。(拜托,我们不要被所有“使用 GNUStep”的东西所牵制。我知道,但它不适合我的需要。继续……)为此,我试图拼凑一个简单的 ORM 系统,让人想起Perl 的 DBIx::Class。一般的想法是使声明尽可能简单(阅读:简短),并且如果可能的话,不需要提供+(id)constantClassAttribute
覆盖方法。
一般的想法是声明我的结果类如下:
到目前为止,太棒了。我现在可以使用 访问这些字段[ORMResult self]->ivars
,并做各种讨厌的事情,比如自动生成访问器,如-[toManyRelation]
or -[setToOneRelation]
。小菜一碟。不幸的是,我无法使用此设置添加两条信息;一个很容易解决,另一个不太简单:
实际结果类是什么?
这可以通过子类化
ORMResult
(如SomeTable
)解决,并将其插入其中,使用运行时动态(ag)ics 来确定它的一致性(toMany,toOne)。(这是一个棘手的问题!)这种关系可以为空吗?
这不太容易解决。我最初的想法是
(ab) 使用协议,如下所示:
这可以编译,但不幸的是,当我尝试使用 GDB 检查
ivars->ivar_list
条目时,我发现协议信息实际上并没有被保存以供运行时使用。我想这会产生某种扭曲的感觉,因为协议声明主要是针对编译器的。滥用协议标识符 (
byref
,bycopy
和朋友,使用定义:这有一个相当明显的缺点,即实际上不起作用,因为这些说明符显然只在协议方法声明中起作用。
那么,问题是如何在实践中消除这种对 ivars 的信息附加?
注意:正如最初提到的,我使用的是GNU Objective-C 运行时,由 Linux 上的 GCC 提供;而不是苹果提供的!
编辑:星痘!我忘记了一个中心点:当然,另一种选择是简单地使所有关系都可以为空。这我真的不想要,但如果没有其他选择存在,我想这就是我最终要走的路。
objective-c - Objective-C 中的 super 到底是什么?
据我所知,它是一个指向超类的指针。它与超类硬连线,而不是在运行时动态计算出来。想详细了解一下...
任何人?
objective-c - object_setClass 到更大的类
我正在使用object_setClass(id object, Class cls)
. 我正在将该类更改为原始类的子类。然后我设置了一些只在子类上定义的属性,一切似乎都很好。
我对此感到有点惊讶,因为object_setClass
据我所知,它不会重新分配对象,它只会更改isa
指针。如果子类实例比原始类实例大得多(意味着有更多的 ivars),我看不出该对象如何按预期工作。
这仅仅是因为内存中的对象之间有很多缓冲内存(由于对齐等)吗?
这是健壮的,还是在某些情况下会崩溃?
iphone - 谁在处理程序文件上释放了我的对象?
我是iphone开发世界的新手..
我开始了一个新项目,我用它来测试我对目标 c 的了解,它基本上从我的本地服务器发送和接收数据,然后,我将一些数据存储在类中,它工作正常。一切都在命令行上。
我的班级定义:
我设置了“输出”值,将它们转换为 xml 并将它们发送到我的服务器。我的服务器响应,我得到“in”值名称是一个字符串,其中包含“in”值的一些特殊值。
当我尝试将我的代码与我在互联网上找到的一些示例/演示混合时,问题就出现了,演示带来了一些 MVC?文件(*Handler.h/m、*ViewController.h/m、*AppDelegate.h/m)。有一个按钮(btnStart),如果我按下那个按钮,它会调用
如果我将发送和接收调用放在 start 方法中,一切正常。
但...
我尝试了两个必须按钮:发送和接收,两者都有效(我已经尝试过它们并将输出发送到控制台),两种方法都是:
都在 *Handler.m 中
然后:方法 1) 将只执行 [myClient send]; 方法 2) 将只执行 [myClient receive];
它不起作用,它给我一个“BAD_ACCESS”错误,我调试了(我使用了 NSZombie ..)......
我发现调用 [myClient send] 时存储的数据(输入、输出、名称)在调用 [myClient 接收] 时被释放/杀死/不存在
我没有打电话给 [myClient release] 或类似的东西。
问题:我做错了什么?该代码(方法1)和2))应该在哪里?
谢谢。
更新: 这是一些代码,它很大,所以我复制并粘贴了重要的部分,如果您需要更多代码,请告诉我,谢谢!
更新: 谢谢大家(IwasRobbed、Simon、TechZen)
我一直在调试和更改代码......我发现:为了保持名称名称和id值,我必须这样做:
问题:Q1。谈论旧代码(没有copy
),释放name
andid
值是因为
1)它的尾随paramIn
字典,并被paramId
释放?
或者
2) 两个值都是从paramIn
字典中复制的,但没有保留/复制指令
我想,答案是 2),对吧?
Q2。如何保留存储在 NSMutableDictionaries 中的值paramIn
和paramOut
?
谢谢