Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在开发iOs/OsX应用程序时使用Objective C的优雅方式?_Objective C_Ios_Cocoa - Fatal编程技术网

Objective c 在开发iOs/OsX应用程序时使用Objective C的优雅方式?

Objective c 在开发iOs/OsX应用程序时使用Objective C的优雅方式?,objective-c,ios,cocoa,Objective C,Ios,Cocoa,我已经开发iOs和OsX应用程序好几个月了,但我仍然觉得我做错了什么。我尽量遵守这些准则,尽量使用苹果提供的物品。但他们似乎让我的代码很难理解 例如: 当我只想“递增”一个NSNumber对象(这是不可变的,但你明白我的意思)时,我会使用如下笨拙的行: int value = [counter intValue]; counter = [NSNumber numberWithInt:value +1]; 这真的有必要吗?有没有更优雅的方式(i++、inc(i)等)来做这样简单的事情?尤其是当你

我已经开发iOs和OsX应用程序好几个月了,但我仍然觉得我做错了什么。我尽量遵守这些准则,尽量使用苹果提供的物品。但他们似乎让我的代码很难理解

例如:

当我只想“递增”一个NSNumber对象(这是不可变的,但你明白我的意思)时,我会使用如下笨拙的行:

int value = [counter intValue];
counter = [NSNumber numberWithInt:value +1];
这真的有必要吗?有没有更优雅的方式(i++、inc(i)等)来做这样简单的事情?尤其是当你在使用坐标时,它会让你感到非常沮丧和难以处理


在使用Objective C时,我感觉我一直在分配、取消分配和转换对象,并且在所有这些转换中浪费了我自己和CPU的大量时间。谢谢你的时间,我真的很感谢你的回答,我期待着你的提示

以您的示例为例,您使用NSNumber作为计数器有什么特殊原因吗?最好使用int,这样就可以使用value++


好的Objective-C代码的关键是在对象有意义时使用它们。不要害怕使用非对象数据类型,也不要害怕在需要时下拉(不是最好的术语)到C。

正如@sosborn所写:仅在需要时使用对象。但是:当需要的时候,你还是觉得不对,干脆不要。编写一个宏来增加NStNoT,使用ARC让编译器尽可能高效地为你做内存管理等。如果你真的担心时间,使用C或汇编来执行时间关键任务,或者C++,如果你想要OO.< /P> 备注:NSNumber增量宏:

#define NSNUM_INC(n) do { n = [NSNumber numberWithInt:[n intValue] + 1]; } while (0);

您可以为NSNumber编写类别,以实现所需的方法。对于您的示例,类别文件包含以下函数:

-(NSNumber *)numberByAddingInt:(int)i
{
...
}
包括此文件,然后您可以将其称为:

counter = [counter numberByAddingInt:1];

我尽可能经常地使用提供的对象。希望它最终能帮助我。一开始,我投入了太多的精力来寻找“我自己的”解决方案,以解决AppleObjects框架已经解决的问题。所以我试着坚持他们的目标。。。所以当我做“简单”的事情时,你建议使用简单的C数据类型?当然,计数器就是一个很好的例子。苹果提供的物品在合适的情况下使用是非常棒的。例如,当您需要一个数字的不同表示形式(float、int等)或将一个数字序列化到磁盘时,NSNumber非常好。然而,正如你所理解的,这对柜台来说是可怕的。非常感谢你如此清楚地指出了这一点。我一直试图避免使用简单的数据类型,这让编写ObjC变得非常不愉快。这种对对象的过度使用似乎相当普遍,甚至在有一定经验的Objective-C用户中也是如此。为什么?苹果代码经常使用普通C。Objective-C用户不应该害怕普通C。它既不脏也不错。这看起来真的很棒!我以前从未使用过这些类型的宏。非常感谢你的努力。如果我有关于这些宏的问题,我可以给你写一条消息吗?这个问题太广泛了,可能会引起更广泛的讨论。请看