Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Iphone 我应该使用C函数还是Obj-C方法?_Iphone_Objective C_Cocoa - Fatal编程技术网

Iphone 我应该使用C函数还是Obj-C方法?

Iphone 我应该使用C函数还是Obj-C方法?,iphone,objective-c,cocoa,Iphone,Objective C,Cocoa,我将要创建一个将两个NSDATE组件添加在一起的函数,将其放在C风格的函数中有什么好处,还是应该放在Obj-C方法中 是否有理由使用其中一个而不是另一个,或者我应该始终坚持使用Obj-C 顺便说一句:我肯定这不会有什么不同,但这是iPhone上的一个应用程序 非常感谢我不清楚您所说的“将组件添加到一起”是什么意思。你能确切地解释一下你需要做什么吗 把它变成函数还是方法很大程度上取决于你希望如何使用它。是否有特定的对象需要这样做,或者这种需要可能会出现在程序中的许多地方?我不清楚您所说的“将组件添

我将要创建一个将两个NSDATE组件添加在一起的函数,将其放在C风格的函数中有什么好处,还是应该放在Obj-C方法中

是否有理由使用其中一个而不是另一个,或者我应该始终坚持使用Obj-C

顺便说一句:我肯定这不会有什么不同,但这是iPhone上的一个应用程序


非常感谢

我不清楚您所说的“将组件添加到一起”是什么意思。你能确切地解释一下你需要做什么吗


把它变成函数还是方法很大程度上取决于你希望如何使用它。是否有特定的对象需要这样做,或者这种需要可能会出现在程序中的许多地方?

我不清楚您所说的“将组件添加到一起”是什么意思。你能确切地解释一下你需要做什么吗


把它变成函数还是方法很大程度上取决于你希望如何使用它。是否有某些特定的对象需要这样做,或者这种需要可能会出现在程序中的许多地方?

函数调用的开销比目标C方法调用稍微少一些,但这不是使用它们的好理由,除非您已经在该区域检测到了严重的性能问题

目标C程序看起来与普通C程序非常不同。保持语言的外观和习惯用法的一致性是将几乎所有简单行为实现为方法而不是C函数的充分理由


以Cocoa Touch使用函数而非方法的情况为例。函数调用的开销略低于目标C方法调用,但这不是使用它们的好理由,除非您已经在该领域检测到关键性能问题

目标C程序看起来与普通C程序非常不同。保持语言的外观和习惯用法的一致性是将几乎所有简单行为实现为方法而不是C函数的充分理由


以Cocoa Touch使用函数而非方法的情况为例。在Objective-C中,正确的术语不是“调用对象上的方法”,而是“向对象发送消息”

这使得决策变得简单:您是否向对象发送消息?你是告诉它做某事还是向它询问信息?如果是这样,则通过将代码放入方法中,使对象响应该消息。如果不是(如果任务独立于任何对象),则将其设置为函数

您可以浏览、和列表,查找使某些内容属于函数而不是方法的对象独立性的示例

我将要创建一个函数,它将NSDateComponents添加到一起,将其放在C风格的函数中有什么好处,还是应该放在Obj-C方法中

我会将其放入一个分类到NSDateComponents的实例方法中。调用(消息)看起来像
[componentsA componentsByAddingComponents\u PRH:componentsB]
。(请注意,我加入了我的姓名首字母,这样,如果苹果添加了自己的
组件添加组件:
方法,当用户将设备升级到新操作系统时,我的应用程序的行为不会突然改变。)


一个现有的例子是。

在Objective-C中,正确的术语不是“调用对象上的方法”,而是“向对象发送消息”

这使得决策变得简单:您是否向对象发送消息?你是告诉它做某事还是向它询问信息?如果是这样,则通过将代码放入方法中,使对象响应该消息。如果不是(如果任务独立于任何对象),则将其设置为函数

您可以浏览、和列表,查找使某些内容属于函数而不是方法的对象独立性的示例

我将要创建一个函数,它将NSDateComponents添加到一起,将其放在C风格的函数中有什么好处,还是应该放在Obj-C方法中

我会将其放入一个分类到NSDateComponents的实例方法中。调用(消息)看起来像
[componentsA componentsByAddingComponents\u PRH:componentsB]
。(请注意,我加入了我的姓名首字母,这样,如果苹果添加了自己的
组件添加组件:
方法,当用户将设备升级到新操作系统时,我的应用程序的行为不会突然改变。)


一个现有的例子是。

您更可能希望使用Objective-C方法作为NSDateComponents上的类别实现

@interface NSDateComponents (DGCalculations)
/*!
 \brief    Add date components
 \details  Add the given date components to the receiver and
           return the result as a new date components object.
*/
- (NSDateComponents *)componentsByAddingComponents:(NSDateComponents *)components;
@end

@implementation NSDateComponents (DGCalculations)
- (NSDateComponents *)componentsByAddingComponents:(NSDateComponents *)components {
    NSDateComponents *result = [[[NSDateComponents alloc] init] autorelease];
    [result setDay:[self day] + [components day]];
    // handle the rest
    return result;
}
@end
这样一来,使用起来就更好了:

result = [firstComponents add:secondComponents];

您更可能希望使用Objective-C方法作为NSDateComponents上的类别实现

@interface NSDateComponents (DGCalculations)
/*!
 \brief    Add date components
 \details  Add the given date components to the receiver and
           return the result as a new date components object.
*/
- (NSDateComponents *)componentsByAddingComponents:(NSDateComponents *)components;
@end

@implementation NSDateComponents (DGCalculations)
- (NSDateComponents *)componentsByAddingComponents:(NSDateComponents *)components {
    NSDateComponents *result = [[[NSDateComponents alloc] init] autorelease];
    [result setDay:[self day] + [components day]];
    // handle the rest
    return result;
}
@end
这样一来,使用起来就更好了:

result = [firstComponents add:secondComponents];
+1表示“向发送消息”(非常重要的区别!),以及并非所有事情都必须作为一种方法最好地完成(至少在一种分派语言中);+1表示“向发送消息”(非常重要的区别!),以及并非所有事情都必须作为一种方法最好地完成(至少用一种分派语言)。你的意思是“添加两个NSDateComponents”还是“向NSDateComponents类添加新功能”?抱歉,我的意思是“添加两个NSDateComponents”。帖子已被编辑以更正此问题。你的意思是“添加两个NSDateComponents”还是“向NSDateComponents类添加新功能”?抱歉,我的意思是“添加两个NSDateComponets”。已对Post进行编辑以更正此问题。