点语法
点语法本质上是调用方法,类似于setAge与Age方法
对象名.属性名(没有下划线) = [对象名 set属性名];
如何区分点语法是set还是get,需要赋值就是set位于等号左边,需要获取值就是get位于等号右边
get与set方法里用self.属性名 会造成死循环。就是相当于这个方法里调用这个方法
编译器指令:编译阶段帮你处理
@property
Xcode 4.4版本前,@property只能声明,需要与@synthesize配合使用
@property 类型 (去掉下划线的属性名)方法名
声明set与get方法
加了下划线 set与get中就多了下划线,如: set_XXX
Xcode4.4版本后,@property增强,只需写一个@property就可完成声明,实现,与定义。
@property增强的格式:@property 类型 方法名(去掉下划线的属性名);
生成的是带下划线的属性
同类型的也可以写在一起,如@property int age,sex;
生成的属性在.m文件中,子类可以继承但无法直接访问的属性。
如果要声称在.h文件中,则先在.h文件中进行声明,它会先调用.h中声明的属性。
如果要设置set或get条件,就重写set或get方法,不允许set与get都重写,只能重写一个。
id 万能指针
只能指向OC对象,系统编译的时候不会检测。
类与类的判断
返回值布尔类型
判断实例对象是否是这个类或这个子类的实例对象 [实例对象名 isKindOfClass:[类名 class]];
判断是否是指定类的实例 [实例对象名 isMemberOfClass:[类名 class]];
判断类是否是指定类的子类 [[类名 Class] isSubclassOfClass:[另一个类名 class]];
判断对象是否响应指定的方法
返回值是个布尔类型
SEL s =@selector(方法名);
[类名 respondsToSelector: s];
先把方法装饰成SEL类型,再通过respondsToSelector来判断此类里是否有这个方法
判断Car类中是否有stop这个对象方法
返回值是布尔类型
SEL stop = @selector(stop);
[Car instancesRespondToSelector:stop];
响应无参数的方法
[对象名 performSelector:SEL];
响应一个参数的方法
[对象名 performSelector:SEL withObject:调用的方法的参数];
响应两个参数的方法
[对象名 performSelector:SEL withObject:调用的放法的参数 withObject:调用的方法的参数];
SEL即为对象方法。
先用SEL 对象方法名=@selector(对象方法名); 包装一下对象方法
构造方法
用来给对象的属性初始化值得方法,是一个对象方法。
固定格式:if(self=[super init]){ };return self;
父类如何初始化,此类也要如此初始化。如要修改在大括号里修改。
自定义构造方法
1.一定是对象方法
2.返回值一定是instancetype类型
3.名字统一为Init
[person alloc]时就已经创建好了一个对象,并初始化值。
init是一个对象方法,负责再次初始化。
所以初始化时还有其他方法可以再次初始化,如:-(instanceType)initWithName:(NSString*)name{ },即自定义构造方法
可以在自定义构造方法中调用init方法。
@synthesize
Xcode4.4版本之后,@property就包含了此方法。
@synthesize (去掉下划线的属性名)方法名
实现set与get方法
因为property已经声明了类型,所以他直接用来实现
对于@synthesize age;而言,@synthesize在实现时自动生成一个int类型的age,如果我们已经声明了则直接使用我们声明的age。所以写成如:@synthesize age = _age,等号后是我们要用的属性。则此时没有age属性了。