(a) The nature of the class
1. Class is also an object
In fact, the class is also an object, is the class type, referred to as " class object ".
// definition of class type struct objc_class *class; // The class name represents the class object, and each class has only one class object
2.+load and +initialize
> loads all classes and classifications when the program starts, and invokes the +load method for all classes and classifications
> First loads the parent class and then loads the subclasses, that is, the +load of the parent class is called first, and then the +load of the subclass is called.
> Load Primitive Classes First, then load categories
> Whether or not this class is used by the program's running process, it calls +load to load
> When a class is first used (such as creating objects, etc.), the +initialize method is called once
> A class will call the +initialize method only once, call the parent class first, and then call the subclass's
code Example // when the program starts, it loads all the classes in the project at once. After the class is loaded, the +load method + (void) load{ NSLog (@ "person---load" is called) );} // when this class is first used, it is called once +initialize method + (void) initialize{ NSLog (@ " person-initialize " );} @end
3. Two ways to get class objects
class]; // class method // or newclass]; // Object Methods
4. Class object Invocation class method
Classnew];
(ii) Description method
( determines the output of an instance object/class object )
1.-description method
When an object is output using NSLog and%@, the object's-description method is called and the return value is returned for output
1. + Description Method
When you use NSLog and%@ to output a class object, the Class object +description method is called, and the return value is obtained for output
2. Modify the default output of the NSLog
Problem arises
int Main () { *p = [[Person alloc] init]; NSLog (@ "%@", p); return 0 ;} The output is:0x1001033b0> is an address, want to output the specific content
rewrite The-description or +description method to
3. Dead Loop Traps
If you use NSLog to print self in the-description method
(iii) SEL
/* The sel is actually a wrapper around the method, wrapping the method into an SEL type of data to find the corresponding method address.
Principle//1. to wrap a method such as Test into a sel type of data
//2. find the corresponding method address according to the SEL data
//3. Call the corresponding method according to the method address
*/
1. Location of method Storage
> List of methods for each class is stored in the class object
> Each method has an object of the corresponding SEL type
> based on a Sel object, you can find the address of the method, and then call the method
Definition of >sel type
typedef struct OBJC_SELECTOR *sel;
2.creation of SEL objects
SEL s = @selector (test);
SEL s2 = nsselectorfromstring (@ "Test");
Other uses of 3.SEL objects
code example
There are two ways to invoke a method:1) directly through the method name [P test2]2 The SEL that the incoming method corresponds to to find the method address //To call the test method indirectly[P performselector: @selector (Test)];3) object method to pass (with) the parameter[P test:@ "123"]; Equal to the following (SEL's creation sel s =@selector (test:); )[P performselector: @selector (test:) withobject:@ "456"];1>Turn the string into Selsel s=nsselectorfromstring (@ "name");2>Change the Sel object to a string NSString object_cmd represents the current method ([email protected] (test); )nsstring *str = Nsstringfromselector (@selector (test)); NSString*str =Nsstringfromselector (_cmd); add: There is a hidden SEL data inside each method: _cmd (SEL) represents the current method dead loop- (void) test{//_cmd represents the current approach//will trigger a dead loop .[self performselector:_cmd]; }
OC for iOS Development (10)-nature of the class, description, SEL