iOS: How to define public methods?

2019-03-25 13:43发布

How can I define a method that can be called from anywhere, in every viewcontroller class?

I have a method that brings me a json file, and i want it to be reusable, since i have several json calls on my app.

Can you help me?

4条回答
Root(大扎)
2楼-- · 2019-03-25 14:14

You can add it through a category:

EDIT

Create a new .h .m file pair and in the .h file:

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


@ end

Then in the .m file:

@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

Where I'm just assuming that you'll be returning an NSArray, you can put any method there and extend all UIViewControllers. The method bringJSON will be available to all UIViewControllers and its subclasses.

查看更多
虎瘦雄心在
3楼-- · 2019-03-25 14:24

I plused the first answer as it is a way of creating (essentially) another object with methods that can be called from any file that includes that object.

Remember also that objective-c also is simply just C. You can have .c files included that are simply contain ANSI-C routines that can be called also.

查看更多
啃猪蹄的小仙女
4楼-- · 2019-03-25 14:27

Use a + sign before the return type of the method.

For example:

 + (void) Name: (NSString  *) str{

 }
查看更多
兄弟一词,经得起流年.
5楼-- · 2019-03-25 14:31

I believe you are thinking about a static method which would be defined with the "+" symbol.

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

Then you could call it anywhere with the class name first:

[YourClassName yourFunctionName:5];

If you need to have a function that access an object that needs to be instantiated then you will want to do a singleton pattern.

查看更多
登录 后发表回答