Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

runtime - What does this "@@:" mean in class_addMethod?

Use class_addMethod Code:

class_addMethod(newClass, @selector(inputAccessoryView), accessoryImp, "@@:");

What dose the parameter "@@:" mean in this method?

Doc:

/** 
 * Adds a new method to a class with a given name and implementation.
 * 
 * @param cls The class to which to add a method.
 * @param name A selector that specifies the name of the method being added.
 * @param imp A function which is the implementation of the new method. The function must take at least two arguments—self and _cmd.
 * @param types An array of characters that describe the types of the arguments to the method. 
 * 
 * @return YES if the method was added successfully, otherwise NO 
 *  (for example, the class already contains a method implementation with that name).
 *
 * @note class_addMethod will add an override of a superclass's implementation, 
 *  but will not replace an existing implementation in this class. 
 *  To change an existing implementation, use method_setImplementation.
 */
OBJC_EXPORT BOOL class_addMethod(Class cls, SEL name, IMP imp, 
                             const char *types) 
OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0);
like image 947
tomfriwel Avatar asked Oct 15 '25 07:10

tomfriwel


1 Answers

The types parameter describes the arguments and return type of the method as described in class_addMethod:

An array of characters that describe the types of the arguments to the method. For possible values, see Objective-C Runtime Programming Guide > Type Encodings. Since the function must take at least two arguments— self and _cmd, the second and third characters must be “@:” (the first character is the return type).

"@@:" describes a method with returns an object (type encoding @, in your case: UIView *) and takes no arguments apart from the fixed (hidden) arguments self (type encoding @ for object) and _cmd (type encoding : for selector).

like image 127
Martin R Avatar answered Oct 17 '25 20:10

Martin R



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!