Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Ios 关于Objective-C的几个问题_Ios_Objective C - Fatal编程技术网

Ios 关于Objective-C的几个问题

Ios 关于Objective-C的几个问题,ios,objective-c,Ios,Objective C,我是一名实习学生,我正在学习Objective-C以开发IOS应用程序。他们已经有了一个现有的代码库,但是代码的某些部分给我带来了问题 由于之前的开发人员已经不在公司了,而且因为没有其他人知道Objective-C,所以没有人能够回答我关于如何构建应用程序的一些问题,所以我无法确定这是我不理解的,还是仅仅是不好的做法 以下是这些问题: 1°)在某些类中,我发现如下代码: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppe

我是一名实习学生,我正在学习Objective-C以开发IOS应用程序。他们已经有了一个现有的代码库,但是代码的某些部分给我带来了问题

由于之前的开发人员已经不在公司了,而且因为没有其他人知道Objective-C,所以没有人能够回答我关于如何构建应用程序的一些问题,所以我无法确定这是我不理解的,还是仅仅是不好的做法

以下是这些问题:

1°)在某些类中,我发现如下代码:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated] }
这个代码没用,对吧

2°)在项目中类似的9/10方法中,它们返回(无效)。这是Obj-C中的常见做法吗(因为一切都是指针)

3°)有时在头文件和消息文件中都有接口声明。我猜这是因为您只想在标题中为将来的包含声明一个部分,并拥有一个“私有”部分。但在一个文件中,我发现以下代码:

在标题中:

@interface WebViewController : UIViewController
    @properties ...
@end
在Msg文件中:

#import ...
@interface WebViewController ()

@end

@implementation WebViewController ...
在msg文件中第二次声明void接口有什么意义

4°)此外,在另一个类中,接口也被第二次声明,但定义了一个方法(在msg文件中)。下面定义的方法没有在头文件中声明,这有什么意义

提前感谢

欢迎来到Objective-C:)

  • 不一定。超级类可能在其自己的方法实现中定义了特定的行为,如果您不调用它,则会导致问题。重写方法意味着默认情况下不会调用超类自己的方法。 从注释中添加:当然,如果您没有覆盖它,那么超类定义将被调用。您会发现它被覆盖的原因有两个: A.它在Xcode模板中,所以它一直在那里,没有被删除 b、 它以前有其他内容,但是被删除了,方法调用被留下了

  • 对。虽然在方法中没有显式返回void,但确实需要指定某种返回类型。如果没有返回任何内容,则void是正确的值。它通常出现在obj-c类中,因为该方法可以通过改变内部ivar或属性来响应被调用,而不需要返回。或者,结果可能是发送通知,因此不需要返回值。越来越多地使用基于块的完成处理程序取代显式值返回,作为响应方法内容的一种方式

  • 是的,它提供了一个你不想公开的私有接口。在私有接口中没有任何内容的情况下,它可能存在,因为它与来自Xcode的模板代码一起提供,并且没有人删除它。您可以忽略或删除

  • 对于您提到的方法,虽然不需要在接口中声明私有方法,但从编写可读代码的角度来看,它是有意义的(在obj-c中,这是一个得到强烈认可的概念)。由于编译器将删除任何不必要的代码,因此声明它没有什么区别,并且当您或其他人稍后返回时,阅读代码和理解类的任务会变得更加容易。它也是一个将文档放在注释中的好地方,因为它将文档分组在一起

  • 希望有帮助。查看Apple至的Objective-C编程指南,了解更多最佳实践技巧。

    1)。是,您可以删除此方法

    2) 。这取决于您的需求,无论您是否想要返回类型。e、 g

    - (BOOL)isEmptyOrNull:(NSString*)str;
    
    3) 。这些被称为扩展,您可以在这里了解更多

    扩展用于从外部世界隐藏方法(我说的隐藏是指你用眼睛找不到这些方法)


    4) 。在实现文件中定义的方法对于程序员来说是不可见的,它就像java中的私有方法一样,但在ObjC中没有私有方法这样的东西。阅读这个关于私有方法的帖子

    我认为问题#1基本上是“为什么要声明一个覆盖函数,而它只调用父版本”@PeterM是的,这就是我想说的:)对于第二个问题,我的问题更多:在obj-c中有很多方法返回void是常见的吗:例如,我一直在用java编程,而且这种情况很少发生,它们中的大多数实际上返回了一些东西。嘿,是的,对于#1,如果除了调用父版本之外,您不需要做任何事情,那么您根本无法重写。声明它有两个常见的原因:它在模板中,所以它一直在那里,没有被删除&它以前有其他内容,但它被删除了,方法调用被留下了。就#2而言,是的,我看到了很多无效返回方法,因为变异类属性/ivar或者触发通知而不是发送返回值是很常见的。顺便说一句,这是一个很好的问题,我喜欢那些让我们重新审视基本假设的问题。这些是一些非常基本的问题,可以通过对Stackoverflow的一些研究和搜索找到。您以前做过任何研究吗?.m不代表“消息”,而是代表“实现”文件;)第一项:在这种“无意义”的方法中设置断点很容易,以确定何时调用它。这使得它很有用。编写代码是为了使应用程序更易于调试,这一点在代码增长后非常重要。请阅读此文档将回答您的所有问题。