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:如何定义公共方法?的主要内容,如果未能解决你的问题,请参考以下文章