Questions tagged «objective-c»

Objective-c是一种高度动态的基于消息的面向对象语言,是C的超集,它主要用于对Apple的Mac OS X和iOS平台进行编程。

5
在这些比较中,Swift如何比Objective-C快得多?
苹果在WWDC14上发布了其新的编程语言Swift。在演示中,他们对Objective-C和Python进行了一些性能比较。以下是其中一张幻灯片的图片,比较了执行某种复杂对象排序的这三种语言: 关于使用RC4加密算法的性能比较,还有一个更加令人难以置信的图表。 显然,这是一次市场营销讲座,他们没有详细介绍如何在每种情况下实施。我让我想知道: 一种新的编程语言怎么能这么快? Objective-C的结果是由错误的编译器引起的还是在客观上比Swift效率低? 您如何解释性能提高40%?我知道垃圾回收/自动引用控制可能会产生一些额外的开销,但是要多少呢?

5
用于Objective-C开发的警告标志
作为C和Objective-C程序员,我对编译器警告标志有些偏执。 我通常会尝试为我使用的编译器找到完整的警告标志列表,并打开大多数警告标志,除非我确实有很好的理由不打开它。 我个人认为,这实际上可能会提高编码技能以及潜在的代码可移植性,防止出现某些问题,因为它迫使您意识到每个小细节,潜在的实现和体系结构问题,等等。 我认为,即使您是经验丰富的程序员,它也是一种很好的日常学习工具。 对于此问题的主观部分,我有兴趣听取其他有关此主题的开发人员(主要是C,Objective-C和C ++)的信息。 您是否真的在乎诸如脚步警告之类的东西?如果是或否,为什么? 现在关于Objective-C,我最近完全切换到了LLVM工具链(使用Clang),而不是GCC。 在生产代码中,通常会设置以下警告标志(明确地,即使其中一些可能被-Wall覆盖): -壁 -坏功能广播 -Wcast-align -W转换 -W声明后声明 -W弃用的实现 -Wextra -浮子等于 -Wformat = 2 -Wformat-非文字 -Wfour-char-constants -隐式原子性质 -大括号 -遗失声明 -Wmissing-Field初始化程序 -遗漏格式属性 -不愿回报 -遗忘原型 -Wnested-externs -Wnewline-eof -老式风格的定义 -长弦 -希望 -Wpointer-arith -多余的决定 -返回类型 -序列点 -影子 -将64缩短到32 -Wsign比较 -Wsign转换 -严格的原型 -严格选择匹配 -W开关 -Wswitch-默认 -Wswitch枚举 -绝对选择器 -未初始化 -Wonknown-pragmas …

3
在属性设置器中添加逻辑是否被认为是不好的做法?
我跳入一个项目,发现其他开发人员在综合属性的设置器中添加了很多逻辑。我了解这是如何工作的,但我认为这很难理解程序的流程。在阅读代码时,每当看到时self.something = whatever,我总是检查somethingsetter是否被覆盖。 您对此主题有何看法?您认为这是体系结构不良或解决方案完善的标志吗? 如果您有相关的链接/源,我将很高兴阅读更多有关此的内容,很难获得良好的Google搜索结果,因此我也决定在此询问。 感谢您提供任何答案,并请注意,如果您没有看到标签,我在说的是目标C(即使我猜这不是特定于语言的问题)。

5
用于iPhone / iPod / iPad开发的MonoTouch与Objective-C [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 对于具有.Net经验并希望为iPhone / iPod / iPad开发的人来说,值得学习Objective-C吗?MonoTouch是一个不错的选择吗?在Objective-C中使用MonoTouch与编码时要进行哪些取舍?
25 c#  .net  iphone  objective-c 

2
为什么在可可环境之外没有广泛使用Objective-C?
Objective-C具有良好的面向对象,简单,优雅和(作为C的超集)低级功能的特点。似乎是很多人在Go中寻找并尝试找到的C ++的简单,现代的替代品。但是它仅用于可可和NextSTEP后环境,即使在这种情况下,由于历史原因,它也被视为负担,而不是最佳选择。 为什么它没有被更广泛地使用?有什么问题?

5
成功:/失败:阻止与完成:阻止
我在Objective-C中看到了两种常见的块模式。一个是一对成功:/失败:块,另一个是单个完成:块。 例如,假设我有一个任务将异步返回对象,而该任务可能会失败。第一种模式是-taskWithSuccess:(void (^)(id object))success failure:(void (^)(NSError *error))failure。第二种模式是-taskWithCompletion:(void (^)(id object, NSError *error))completion。 成功:/失败: [target taskWithSuccess:^(id object) { // W00t! I've got my object } failure:^(NSError *error) { // Oh noes! report the failure. }]; 完成: [target taskWithCompletion:^(id object, NSError *error) { if (object) { // W00t! I've got my object } …

2
为什么Swift不需要分号?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我通常使用c#或Objective-C进行编码,最近我开始学习Apple的新编程语言-Swift。 我注意到的第一件事是,您不需要在Swift中添加分号来结束一行,但是如果您这样做了-至少从我的测试中可以看出,它不会干扰编译器。 当我写: int someNumber = 0; 在Objective-C中,分号告诉程序该行结束并且不会掉线到下一行。 使用Swift我可以用 var someNumber:Int = 5 而不添加分号,系统便知道这是行的结尾。 是什么让某些语言可以这样做而其他语言则不能呢?为什么不保持统一的系统,在末尾添加分号?


7
持续集成:哪个频率?
我总是在每次提交后启动构建,但是在这个新项目中,架构师只是要求我将频率更改为“每15分钟构建一次”,而我只是不明白为什么这是一个很好的理由,而不是“以每次提交为基础”。 首先,一些细节: Objective-C(iOS 5)项目 10名开发人员 每个构建实际上需要大约1分钟的时间,其中包括构建和单元测试。 集成服务器是Mac Mini,因此这里的计算能力并不是真正的问题 我们将Jenkins与XCode插件一起使用 我的观点是,如果您在每次提交时都进行构建,那么您现在就可以查看出了什么问题,并且可以直接更正您的错误,而不会过于困扰其他开发人员。另外,这样我们的测试仪就不会受到UT错误的困扰。他的论点是,开发人员将被“构建错误”邮件淹没(这不是完全正确的,因为可以将Jenkins配置为仅针对第一个损坏的构建发送邮件),并且如果频率频繁,则无法正确完成指标构建数太高。 那么,您对此有何看法?

3
Massive View Controller-IOS-解决方案
我确定每个新的iOS开发人员都会遇到以下问题:View Controller会很快因各种目的而挤满代码,很容易获得500多行代码。 这是两个基本和通用屏幕的外观: 1)表单屏幕: 2)表格视图控制器屏幕 到目前为止,我已经阅读了两种不同的解决方案: 第一个解决方案:https : //bendyworks.com/single-responsibility-principle-ios/。这是基于通知的,它将View Controller与(意图)View Model完全分开,从而减少了View Controller中的代码。我认为它具有破坏代码的缺点,类似于Go-To结构。看起来像这样: 第二种解决方案使拥挤的View Controller保持相同(按钮操作在VC中执行,依此类推)。但使用TPKeyboardAvoiding,BlocksKit之类的库或其他大多数基于类别的解决方案。使用第二种解决方案,可以大大减少代码,但是视图控制器仍然承担着很多责任。 您如何看待这些解决方案?哪个更好?有更好的吗?
16 mvc  ios  objective-c 

2
Objective-C的方法开销是否不建议采用“许多小方法”设计方法?
我通常喜欢使用小方法,这是Bob Martin在Clean Code中所建议的。我对Objective-C的内部知识也已经读够了,至少对它的消息分发如何工作有一些了解(bbums系列对此特别有用)。 尽管有过早的优化问题,但我想知道,Objective-c使用objc_msgSend所做的所有工作,实际上是否足够重要,以至于“许多小方法”方法对于Objective-C项目而言是不可取的。 经验发现尤其值得欢迎(也许我有时会自己进行测试)。任何编写过大型Objective-C项目的人的经验也将很棒。 澄清度 这个问题的总体语气是故意的。我不是在问特定应用程序的性能调优(这就是为什么我在这里而不是在SO上问的原因),而是更多关于Objective-C的语言特性是否会阻碍某种设计方法。我观察到我从Apple和其他各方(在github等上)看到的许多代码都倾向于大型方法(和类),并且我想知道这是否由于语言而逐渐消失了本身。当然,我可能读错了代码,或者可能是文化因素而不是技术因素导致了这种趋势(如果存在)。 (对于它的价值,我目前正在编写Objective-C,并且正在使用小的方法) 进一步要求 我同意已经给出的两个答案。我想做的另一件事是让某人指向我(希望是实质性的)开源(或其他可见的)Objective-C代码库,该代码库使用了不错的简短方法(和小型类)。我尚未在Objective-C中看到任何东西可与(例如)fitnesse来源进行比较。

3
人们在Objective C中编程时会使用const吗?
相关:“将'const NSString *'发送到类型'NSString *'的参数将丢弃限定符”警告 有时候,我认为这很有用。我可能需要传递一个表,并要确保该表的内容不会更改。 但是,在大多数Objective-C程序示例中,我从未见过const。我的问题是为什么?

7
绕过不变性
我是面向对象编程的新手,一个需要我花一段时间才能掌握的概念是不变性。我认为昨晚灯泡熄灭了,但我想验证一下: 当我遇到无法更改不可变对象的声明时,我会感到困惑,因为例如,我可以执行以下操作: NSString *myName = @"Bob"; myName = @"Mike"; 在那里,我刚刚更改了不可变类型NSString的myName。我的问题是,“对象”一词可以指代内存中的物理对象,也可以指代“ myName”。前一个定义适用于不变性的概念。 对于变量,(对我而言)对不变性的更清楚的定义是,不变对象的值只能通过更改其在内存中的位置(即其引用(也称为指针))来更改。 这是正确的,还是我仍然迷失在树林中?

1
iOS / OSX开源项目的命名约定
并非总是如此,但在大多数情况下,您会发现iOS或Mac OS X开源项目,其名称以作者姓氏和名字的首字母开头。如果项目要由Nick Leblanc创作,则该项目将被读取为NLMyProject。 例子: 符文·马德森(Rune Madsen)的RMSwipeTableViewCell, Ezequiel Becerra的EBCardCollectionViewLayout, SDiPhoneVersion塞巴斯蒂安Dobrincu, Leo Natan的LNNotificationsUI。 那是哪里来的 是否有人首先以这种方式编写的,然后其他人都遵循? 即使在《苹果指南》中,我也找不到任何相关信息。那个成语写在任何地方吗?

1
为iOS应用开发组织代码
我一直在为iOS平台开发应用程序,并且一直在进行中,我注意到我在整理文件(.h,.m,.mm)方面做得很糟糕。在为iOS项目组织文件时,是否有任何行业标准或最佳实践? 我的文件包括自定义类(在视图控制器旁边),自定义的视图控制器,第三方内容,仅适用于iOS 5.0+的代码以及适用于早期版本的代码。我正在寻找一种解决方案,以一种使其他人(或我自己在未来几年)可以查看并理解应用程序基本结构的方式来组织事物,而不会迷失在其中找到的多个文件中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.