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中实现,此时该方法被称为私有方法 

page166image4824.png

 

page167image832.png 

2、 descriptong方法默认返回对象的􏰁述信息(默认实现是返回类名和对象的内存地址) NSLog(@"%@", objectA);这会自动调用objectA的descriptong方法来输出ObjectA的􏰁述信息, 

description方法是基类NSObject 所带的方法,因为其默认实现是返回类名和对象的内存地址, 这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关 心的是对象内部的一些成变量的值。因此,会经常重写description方法,覆盖description方法 的默认实现 

3description陷阱 

千万不要在对象description方法中同时使用%@和self,下面的写法是错误的: 

- (NSString *)description {
return [NSString stringWithFormat:@"%@", self]; 

} 同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循 环调用description方法 

 

posted @ 2016-03-18 21:49  甘林梦  阅读(329)  评论(0编辑  收藏  举报