问题标签 [objective-c]

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.

0 投票
12 回答
278005 浏览

objective-c - 如何将字符串转换为双精度,反之亦然?

我想将一个字符串转换为一个双精度,并在对其进行一些数学运算后,将其转换回一个字符串。

我如何在 Objective-C 中做到这一点?

有没有办法将双精度数舍入到最接近的整数?

0 投票
8 回答
8055 浏览

objective-c - Objective-C 整洁

我有一个格式有些混乱的 Objective-C 代码库。有没有办法让 Xcode 重新格式化整个项目以符合编码标准(即正确缩进、空格和制表符等)?是否有其他工具可以完成此任务?

0 投票
9 回答
10866 浏览

objective-c - 避免、发现和消除 Cocoa 中的内存泄漏

发生内存(和资源)泄漏。你如何确保他们没有?

您会建议哪些技巧和技术来帮助避免首先造成内存泄漏?

一旦你有一个泄漏的应用程序,你如何追踪泄漏源?

(哦,请避免“只使用 GC”的答案。在 iPhone 支持 GC 之前,这不是一个有效的答案,即使那样 - 可能会在 GC 上泄漏资源和内存)

0 投票
12 回答
183170 浏览

objective-c - 在 Objective-C 中为类定义私有方法的最佳方法

我刚开始编写 Objective-C 并且有 Java 背景,想知道编写 Objective-C 程序的人是如何处理私有方法的。

我知道可能有几种约定和习惯,并将这个问题视为人们在处理 Objective-C 中的私有方法时使用的最佳技术的聚合器。

请在发布时为您的方法提供一个论据。为什么好?它有哪些缺点(你知道)以及你如何处理它们?


至于我到目前为止的发现。

可以使用在 MyClass.m 文件中定义的类别[例如 MyClass (Private)] 对私有方法进行分组。

这种方法有两个问题:

  1. Xcode(和编译器?)不会检查您是否在相应的 @implementation 块中定义了私有类别中的所有方法
  2. 您必须将 @interface 声明您的私有类别放在 MyClass.m 文件的开头,否则 Xcode 会抱怨“self may not respond to message”privateFoo”之类的消息。

第一个问题可以用空类别来解决[例如 MyClass ()]。
第二个让我很困扰。我希望看到在文件末尾附近实现(和定义)私有方法;我不知道这是否可能。

0 投票
4 回答
5007 浏览

objective-c - Objective-C 是编译成原生代码还是字节码?

在 OS X 上,Objective-C 是编译为本机代码还是字节码?

可以在 Linux 上编译 Objective-C 程序吗?

0 投票
2 回答
546 浏览

objective-c - 如何判断用户是否使用 Cocoa 使用 24 小时时间

我正在尝试确定用户使用的是 24 小时还是 12 小时时间,除了创建 NSDateFormatter 并搜索句点字段的格式字符串('a ' 特点)

这就是我现在正在做的事情:

哪个有效,但感觉有点脆弱。必须有更好的方法,对吧?

0 投票
1 回答
2676 浏览

iphone - 如何在 Interface Builder 中为 UIImage 连接引用插座?

我想以编程方式访问 UIImage ......即 myImage.hidden = TRUE; 等等。我可以为 UILabel 做到这一点,但是当我为 UIImage 重复该过程时,它不起作用。特别是当我将 Interface Builder 中的蓝线拖到图标上时,我没有像使用 UILabel 时那样获得弹出菜单。

也许使用 UIImageView 而不是 UIImage?

谢谢!

0 投票
13 回答
41921 浏览

objective-c - 解决 Objective-C 命名空间冲突的最佳方法是什么?

Objective-C 没有命名空间;它很像 C,一切都在一个全局命名空间中。通常的做法是在类前面加上首字母,例如,如果你在 IBM 工作,你可以在它们前面加上“IBM”;如果你为微软工作,你可以使用“MS”;等等。有时缩写是指项目,例如 Adium 为类加上“AI”前缀(因为它背后没有公司,你可以使用缩写)。Apple 用 NS 为类添加前缀,并表示此前缀仅供 Apple 使用。

到目前为止一切顺利。但是在前面的类名后面附加 2 到 4 个字母是一个非常非常有限的命名空间。例如,MS 或 AI 可能具有完全不同的含义(例如 AI 可能是人工智能),其他一些开发人员可能决定使用它们并创建一个同名的类。Bang,命名空间冲突。

好的,如果这是您自己的一个类和您正在使用的外部框架之一之间的冲突,您可以轻松更改类的命名,没什么大不了的。但是,如果您使用两个外部框架,这两个框架您都没有源代码并且无法更改,该怎么办?您的应用程序与它们都链接,并且您会遇到名称冲突。你将如何解决这些问题?以您仍然可以使用这两个类的方式解决它们的最佳方法是什么?

在 C 中,您可以通过不直接链接到库来解决这些问题,而是在运行时使用 dlopen() 加载库,然后使用 dlsym() 找到您要查找的符号并将其分配给全局符号(您可以以任何你喜欢的方式命名),然后通过这个全局符号访问它。例如,如果您因为某个 C 库有一个名为 open() 的函数而发生冲突,您可以定义一个名为 myOpen 的变量并让它指向该库的 open() 函数,因此当您想使用系统 open() ,您只需使用 open() ,当您想使用另一个时,您可以通过 myOpen 标识符访问它。

在 Objective-C 中是否有类似的可能,如果没有,是否有任何其他聪明、棘手的解决方案可以用来解决命名空间冲突?有任何想法吗?


更新:

只是为了澄清这一点:当然欢迎建议如何提前避免命名空间冲突或如何创建更好的命名空间的答案;但是,我不会接受它们作为答案,因为它们不能解决我的问题。我有两个库,它们的类名发生冲突。我无法改变它们;我没有任何一个的来源。碰撞已经存在,关于如何提前避免碰撞的提示将不再有帮助。我可以将它们转发给这些框架的开发人员,并希望他们将来选择更好的命名空间,但目前我正在寻找一种解决方案,以便现在在单个应用程序中使用这些框架。有什么解决方案可以使这成为可能吗?

0 投票
5 回答
19911 浏览

objective-c - NSMutableArray 销毁

NSMutableArray我有一个包含快乐对象的数组。每当我尝试清除所有对象的数组并重新填充它时,这些对象就会恶意地打开(泄漏)我。

它像这样在init函数中分配

我用来清除它的不同方法包括:

显式分配和释放数组也不起作用。仅当我尝试重置列表时才会发生泄漏。

重置时我错过了一步还是这是一个不同的问题?

0 投票
23 回答
68119 浏览

c - 先学C再学Objective-C

作为一名有抱负的 Apple 开发人员,我想获得社区的意见,如果在进入 Objective-C 并最终进入 Cocoa 框架之前先学习 C 会更好吗?

我的直觉说学习 C,这将为我打下良好的基础。