-(bool) isxxx; //定义bool型最好加上is。
NSString *str=[NSString stringWithFormat:@"%d " , age]; //格式化输出字符串
#pragma mark – selector1//注释标记
点语法的本质还是方法调用
p.age=10 == [p setAge:10]
成员变量作用域:
@private @protected@public
@package:同一个“体系内 可以访问,介于@private和@public之间
私有变量,如果要创建一个成员变量,在声明中@protected
@property int age,no;
@synthesize age=_age,no=_no;
//id的定义
typedef struct objc_object {
Class isa;
} *id;
自定义构造方法规范:
1.一定是对象方法,一定以 – 开头
2.返回值一般是id类型
3.方法名一般以initWith开头。
- (id) initWithName:(NSString*)name {
if(self = [super init]) {
_name = name;
}
return self;
}
+ (id)personWithName:(NSString*)name {
Person *person = [[[Person alloc] init] autorelease];
person.name = name;
return name;
}
父类属性交给父类方法处理,子类方法处理子类自己的属性
Category 分类、类别、类目
1.只增加方法,不增加成员变量
2.分类方法实现中可以访问原来类中声明的成员变量
3.分类方法可以重写 父类方法.build phases
@interface Person (caCC)
@implementation Person(caCC)
typedef struct objc class *Class;
+ (void)load{} //程序一运行,自动加载项目中的类,调用+load方法
+ (void)initialize{} //类的初始话,先调用父类,再子类
// 优先调用分类方法
//输出对象名+地址,决定对象的结果。
- (NSString *)description {
return [NSString stringWithFormat:@"%d,%@", self.age, self.name];
}
NSLog(@”%@”,p); //p为Person *p;
+ (NSString *)description{} //输出类名,决定类的结果
__FILE__
//SEL其实是对方法的一种包装,将包装成一个SEL类型的数据,去找相对应的方法地址,找到方法地址调用方法。消息就是SEL。
typedef struct objc_selector *SEL;
[p performSelector:@selector(test)]; //SEL
SEL s=NSSelectorFormString(name)//_cmd代表当前方法