I am trying to write a class method in Objective C. The project builds fine when I declare the method. But the build fails whenever I try to call the method. Here is my code.
Header File
#import <UIKit/UIKit.h> @interface LoginViewController : UIViewController { //Declare Vars } - (IBAction) login: (id) sender; + (NSString *) md5Hash:(NSString *)str; @end
Source File
+ (NSString *) md5Hash:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), result ); return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; } - (IBAction) login: (id) sender { //Call the class method [self md5Hash:@"Test"]; }
Class methods don't need a class instance. They can't access the instance ( self ) but they have access to the class itself via cls . Static methods don't have access to cls or self . They work like regular functions but belong to the class's namespace.
To call a class method, put the class as the first argument. Class methods can be can be called from instances and from the class itself. All of these use the same method. The method can use the classes variables and methods.
Class method can not call other class methods within the same class.
What is a static method? Static methods in Python are extremely similar to python class level methods, the difference being that a static method is bound to a class rather than the objects for that class. This means that a static method can be called without an object for that class.
You should call it like this:
[LoginViewController md5Hash:@"Test"];
Because it's a class (LoginViewController) method and not an instance (self) method.
Or you could do:
- (IBAction) login: (id) sender { //Call the static method [[self class] md5Hash:@"Test"]; }
which should be exactly the same as calling [LoginViewController md5Hash:@"Test"] directly with the class name. Remember that md5Hash is a CLASS method, not an instance one, so you can't call it in objects (instances of the class), but from the class itself.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With