类方法


oc中两种方法

  1. 对象方法 调用必须先创建对象,通过对象名来调用 -(void)sayHi
  2. 类方法 不依赖对象,直接通过类名来调用 声明除了+不同其他与对象一样 +(void)sayHi
  3. 调用 类方法直接使用类名来调用 [类名 类方法名];
  4. 在类方法中不能直接访问属性
  • 属性是在对象闯将的时候,跟随着对象一起创建在对象之中。
  • 类第一次被访问的时候,会做类加载,是把类的代码存储在代码段。
  • 可以在类方法中创建对象来访问。
  • 在类方法中也不能通过self直接调用当前类的其他对象方法,因为对象方法只能通过对象来调用。
  • 在对象方法中可以直接调用类方法
  1. 什么时候将方法定义为类方法? 如果方法不需要直接访问属性,也不需要直接调用其他方法。那么就可以将这个方法定义为类方法,这样可以节约空间,提高效率。
  2. 关于类方法的规范
  • 如果写一个类,那么就要求为这个类提供一个和类名同名的类方法,这个方法创建一个最纯洁的对象返回。
+(person *)person
	{
	person *p1 = [person new];
	return p1;
}

调用 person *p1 = [person person] -如果你希望创建的对象的属性的值由调用者指定,那么就为这个类方法带参数。类名WithXXX:...

+(person *)personWithName:(NSString *)name andAge:(int)age
	{
		person *p1 = [person new];
		p1->_name = name;
		p1->_age = age;
		return p1;
}

调用 person *p1 = [person personWithname:@"捷克" andAge:19


在一个Target中无法访问另外一个Target中的类

  • %p打印的是指针变量的值
  • %@打印的是指针变量指向的对象
  • NSString本质上是类

学习