iOS:如何定义公共方法?

Posted

技术标签:

【中文标题】iOS:如何定义公共方法?【英文标题】:iOS: How to define public methods? 【发布时间】:2012-06-06 20:56:01 【问题描述】:

如何在每个视图控制器类中定义一个可以从任何地方调用的方法?

我有一个方法可以给我一个 json 文件,我希望它可以重复使用,因为我的应用程序上有几个 json 调用。

你能帮帮我吗?

【问题讨论】:

单身en.wikipedia.org/wiki/Singleton_pattern rooster117 是正确的。您指的是静态方法。请记住,所有方法在 Objective-C 中都是公开的。但是,您可以通过在类扩展中声明方法来“隐藏”方法或导致编译器警告。不过,它们并不是真正的私密。 【参考方案1】:

您可以通过类别添加它:

编辑

创建一个新的 .h .m 文件对并在 .h 文件中:

@interface UIViewController(JSON)
-(void) bringJSON;
-(void) fetchData:(NSData*) data;


@ end

然后在.m文件中:

@implementation UIViewController(JSON)

-(void) bringJSON 

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^

[NSData dataWithContentsOfURL:yourURL];

[self performSelectorOnMainThread:@selector(fetchData:)
withObject:data waitUntilDone:YES];

);




-(void) fetchData:(NSData*) data 

//parse - update etc.




@end

我只是假设您将返回一个 NSArray,您可以将任何方法放在那里并扩展所有 UIViewController。方法 bringJSON 将可用于所有 UIViewControllers 及其子类。

【讨论】:

我怎样才能在加载时返回我的 json? :S 如果我把它放在 de "dispatch_get_main_queue" 里面会出错。 TKS 很多!你解决了我的问题!没有这个社区就很难成为 ios 开发者 很高兴这对您有所帮助。同样在这里,我从社区中学到的东西比从书本或在线教程中学到的更多:) 如何在导入这个.h文件的.m文件中调用它?有人可以展示它是如何完成的吗?此外,代码中的内容完全添加到上面的 .m 文件中,因为我看到一些可能特定于 json 方法的代码【参考方案2】:

我相信您正在考虑使用“+”符号定义的静态方法。

+ (String) yourFunctionName:(NSInteger)someValue .....

然后你可以先用类名在任何地方调用它:

[YourClassName yourFunctionName:5];

如果您需要一个函数来访问需要实例化的对象,那么您将需要执行单例模式。

【讨论】:

【参考方案3】:

在方法的返回类型前使用 + 号。

例如:

 + (void) Name: (NSString  *) str

 

【讨论】:

【参考方案4】:

我加了第一个答案,因为它是一种创建(本质上)另一个对象的方法,该对象的方法可以从包含该对象的任何文件中调用。

还请记住,objective-c 也只是 C。您可以包含 .c 文件,这些文件仅包含可以调用的 ANSI-C 例程。

【讨论】:

我明白了,我对类方法的问题是,我的返回总是出错,因为它不能使用实例变量。有没有办法使用类变量?关于单身人士,我想我必须阅读它。单例与协议不同?我来自前端,大约一个月前我就在 xcode 中。所以做更复杂的事情有点困难。非常感谢您的帮助! 您也可以始终实现 C++ 对象。这样您就可以提供仅具有函数访问权限的受保护/私有变量。 XCode 确实能够将 C++ 对象编译成您的 Objective-C 代码。我会尝试找到一些链接,但这里有一篇关于 *** 上的主题(没有示例代码)的帖子。 ***.com/questions/406753/…

以上是关于iOS:如何定义公共方法?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在私有方法中定义公共变量?

iOS 常用公共方法

您可以强制从抽象基类继承的类仅具有在基本情况下定义的公共方法吗?

是否有必要将方法定义为“公共”?

iOS 常用公共方法

iOS常用公共方法