【Objective-C学习笔记】核心语法——类的本质、description方法
2015-04-05 12:15
537 查看
第一部分 类的本质
一、基本使用
1、类本身也是一个对象,是对象就有类型,是Class类型的对象,简称类对象。
2、内存中创建对象的步骤
(1)利用Class创建Person类对象。
(2)利用Person类对象创建Person实例对象。
3、获取类对象
1、重写类的加载和初始化
(1)当程序启动时,就会加载项目中所有的类和分类,并调用每个类和分类的+load方法。只会调用一次
(2)当第一次使用某个类时,就会调用当前类的+initialize方法
(3)加载顺序:
1> 先加载父类,再加载子类 (先调用父类的+load方法,再调用子类的+load方法)
2> 先初始化父类,再初始化子类 (先调用父类的+initialize方法,再调用子类的+initialize方法)
3> 注意:先加载原来类,再加载分类,最终的结果就是调用分类的+initialize方法覆盖原来类的+iinitialize方法
第二部分 description方法
一、基本知识
1、对象方法 - description
使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出,默认输出的是<类名 地址>
2、类方法 + description
使用NSLog和%@输出某个类对象时,会调用类对象的+description方法,并拿到返回值进行输出,默认输出的是类名
输出某个对象,默认的结果不是我们想要的,我们想要输出对象的实例变量,那么我们需要重写-description方法
一、基本使用
1、类本身也是一个对象,是对象就有类型,是Class类型的对象,简称类对象。
2、内存中创建对象的步骤
(1)利用Class创建Person类对象。
(2)利用Person类对象创建Person实例对象。
3、获取类对象
#import <Foundation/Foundation.h> @interface Person : NSObject @end @implementation Person @end(1)实例对象调用class,对象调用class方法获取对象的类对象
Person *p = [[Person alloc] init]; Class *c = [p class]; Class *c1 = [p1 class];(2)类对象调用class,获取Person类对应的类对象
Class *c2 = [Person class];(3)类对象的地址一致,说明是同一个类对象
NSLog(@"c=%p, c1=%p, c2=%p", c, c1, c2); // c=0x100002598, c1=0x100002598 , c2=0x100002598二、类的加载和初始化
1、重写类的加载和初始化
#import <Foundation/Foundation.h> #import "Person.h" #import "Student.h" @interface Person : NSObject @property int age; @end @implementation Person // 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法 + (void)load { NSLog(@"Person--load"); } // 当第一次使用这个类的时候,就会调用一次+initialize方法 +(void)initialize { NSLog(@"Person---initialize"); } @end @interface Student : Person @end @implementation Student // 在类被加载的时候调用 + (void)load { NSLog(@"Student--load"); } +(void)initialize { NSLog(@"Student---initialize"); } @end @interface Person (ZC) @end @implementation Person (ZC) // 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法 + (void)load { NSLog(@"Person (ZC)--load"); } // 当第一次使用这个类的时候,就会调用一次+initialize方法 +(void)initialize { NSLog(@"Person (ZC)---initialize"); } @end int main() { [[Student alloc] init]; return 0; }
// 结果: Person--load Student--load Person (ZC)--load Person (ZC)---initialize Student---initialize2、总结
(1)当程序启动时,就会加载项目中所有的类和分类,并调用每个类和分类的+load方法。只会调用一次
(2)当第一次使用某个类时,就会调用当前类的+initialize方法
(3)加载顺序:
1> 先加载父类,再加载子类 (先调用父类的+load方法,再调用子类的+load方法)
2> 先初始化父类,再初始化子类 (先调用父类的+initialize方法,再调用子类的+initialize方法)
3> 注意:先加载原来类,再加载分类,最终的结果就是调用分类的+initialize方法覆盖原来类的+iinitialize方法
第二部分 description方法
一、基本知识
1、对象方法 - description
使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出,默认输出的是<类名 地址>
#import <Foundation/Foundation.h> @interface Person : NSObject @property int age; @property NSString *name; @end @implementation Person @end int main() { Person *p = [[Person alloc] init]; p.age = 20; p.name = @"jack"; NSLog(@"%@", p); retrun 0; }
// 结果是 <Person: 0x100206870>
2、类方法 + description
使用NSLog和%@输出某个类对象时,会调用类对象的+description方法,并拿到返回值进行输出,默认输出的是类名
Class c = [Person class]; NSLog(@"%@", c);
结果是: Person二、打印对象的实例变量
输出某个对象,默认的结果不是我们想要的,我们想要输出对象的实例变量,那么我们需要重写-description方法
@implementation Person // 决定了实例对象的输出结果 -(NSString *)description { return [NSString stringWithFormat:@"age=%d, name=%@", _age, _name]; } @end
//重写以后,main函数中NSLog(@"%@", p); age=20, name=jack三、NSLog打印补充
int main() { Person *p = [[Person alloc] init]; // 1.指针变量p的地址 NSLog(@"%p", &p); // 2.对象的地址 NSLog(@"%p", p); // 3.<类名:对象地址> NSLog(@"%@", p); // 4.输出文件路径 NSLog(@"%s", __FILE__); //NSLog输出C语言字符串的时候,不能有中文 // 5.输出代码行数 NSLog(@"%d", __LINE__); // 6.输出所在函数的函数名 NSLog(@"%s", __func__); return 0; }
相关文章推荐
- 【Objective-C学习笔记】核心语法——构造方法
- 【黑马程序员】Objective-C语言学习笔记之核心语法(四)
- OC核心语法之构造方法、Category分类、类的本质、description和SEL
- Objective-C基础学习笔记(七)-分类-Category-类的本质-load和+initialize方法-SEL数据
- Objective-C学习笔记(四):OC之分类、类对象、description方法和SEL
- 学习笔记(objective-c)-重写description方法
- 【Objective-C学习笔记】核心语法——点语法、id类型、SEL类型
- OBJ-C实例变量修饰符;私有变量;私有方法;description;多态;点语法学习笔记
- 【Objective-C学习笔记】核心语法——分类-Gategory
- 【Objective-C学习笔记】核心语法——实例变量作用域、关键字@property和@synthesize
- Objective-C学习笔记---类别(实现多重继承的方法)
- ASP.NET 3.5核心编程学习笔记(58):利用页面方法来进行远程调用
- 【黑马程序员】Objective-C语言学习笔记之对象的创建、使用和方法调用(三)
- java核心技术学习笔记8---equals()方法和hashCode()方法
- 【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)
- C++开发者快速学习Objective-C语言核心语法
- Objective-c学习笔记(一)oc的基本语法
- 第二章、Objective-c 语法,继承,protocol和delegate(iOS学习笔记,从零开始)
- Objective-C 2.0 学习笔记二(类、对象和方法)
- 【zepto学习笔记01】核心方法$()