------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 实例变量修饰符——@public @protected @private
实例变量作用域
- @public修饰的实例变量可以在任意程序集访问
- @protected修饰的实例变量在当前类及其派生类中可以访问
- @private修饰的实例变量只在当前类中可以访问
在.m文件中定义的变量,私有变量只能在当前类中使用不能被子类继承也不能被子类使用,而@private修饰的实例变量可以被子类继承但是不能被子类使用
3. OC中私有方法
在.h文件中没有声明但是在.m文件中实现的方法是OC中的私有方法,父类的私有方法不能被子类继承,通过关键字self访问私有方法
示例代码如下;
#import <Foundation/Foundation.h>
//类的声明
@interface Car:NSObject
-(void)test;
@end
//类的实现
@implementation Car
//定义一个私有方法
-(void)run{
NSLog(@"车在跑");
}
-(void)test{
//使用self调用私有方法
[self run];
}
@end
//main方法
int main(int argc, const char * argv[]) {
@autoreleasepool {
Car *car=[Car new];
//通过调用类对外公开的方法调用私有方法
[car test];
}
return 0;
}
以%@打印一个对象时调用了一个对象的description方法,打印结果是<类名 对象地址>
以%@打印一个类对象时,调用的是类的description方法,打印出类的信息
示例代码如下:
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Dog *d=[Dog new];
//调用对象的description方法打印一个对象
NSLog(@"%@",d);
//调用类的description方法打印类的信息
NSLog(@"%@",[d class]);
}
return 0;
}
5. 类的本质
类的本质也是一个对象,类对象代表类,class代表类对象,类方法属于类对象。
eg: Person *p=[Person new]; Person是一个类对象,是class类型,p是一个类类型的变量,是一个实例变量
获取类对象的方法:
- 通过实例对象获取 eg:Dog *dog=[Dog new]; Class d1=[dog class];
- 通过类名获取 eg:Dog *dog=[Dog new]; Class d2=[Dog class];
使用类对象创建对象:Dog *dog1=[d1 new];
调用类方法:[d1 run];