OC中的私有变量和description
1、OC中的私有变量
在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private的。在.m中定义 的成员变量不能和它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。
能够使用 父类的@public 类型的变量、@protect类型的变量
@private 类型的变量可以看到,但是不能使用
OC中私有方法实现有两种方式: 1)方法在.m中实现,不在.h中声明(相对私有) 2)通过匿名类别(延展)实现私有(一般意义上的私有)
@interface MyClass { // 添加变量
}
- (void)PublicMethod;//公共方法,可以被继承类继承
@end
而在类的.m文件中,采用类别来实现私有方法,具体操作为: @interface MyClass()//注意(),即定义一个空类别
- (void)PrivateMethod;//在类别中定义私有方法
@end
在.h中没有声明 在.m中实现,此时该方法被称为私有方法
2、 descriptong方法默认返回对象的述信息(默认实现是返回类名和对象的内存地址) NSLog(@"%@", objectA);这会自动调用objectA的descriptong方法来输出ObjectA的述信息,
description方法是基类NSObject 所带的方法,因为其默认实现是返回类名和对象的内存地址, 这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关 心的是对象内部的一些成变量的值。因此,会经常重写description方法,覆盖description方法 的默认实现
3、description陷阱
千万不要在对象description方法中同时使用%@和self,下面的写法是错误的:
- (NSString *)description {
return [NSString stringWithFormat:@"%@", self];
} 同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循 环调用description方法