点语法 :是调用成员变量的set、get方法;
为什么要设计点语法 : 方便程序员快速入手oc , 简化程序设计 ,隐藏内存管理细节 ,隐藏了多线程,同步,加锁细节;
[Student new] 等同于 [[Student alloc] init];
方法的声明和实现,都必须以+或-开头;
+ : 表示类的方法(静态方法)
- : 表示对象方法(动态方法)
类方法的好处及使用场景
1,不依赖于对象,执行效率高
2,当方法内部不需要使用到成员变量时,尽量使用类方法
在.h中声明的所有方法都是public类型(通过Category可以实现private)
变量的作用域
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类内部访问
变量必须定义在类的{}中
如果直接把方法写在。m文件中, 没有在.h中进行声明 ,那么该方法是私有方法;
Property 属性 :
只在。h文件中使用 ,当编译器遇到@property时,会自动展开成getter和setter的声明 ;
property在。h文件中,于@interface同级;
例如 : @property int age;
相当于
-(void)setAge:(int)newAge;
-(int)age;
/**
*set 方法命名规范:
* 方法名必须以set开头
* set后面跟上成员变量的名称,成员变量首字母大写
* 返回值是void
* 一定要接收一个参数,而且参数类型跟成员变量类型一致。
* 形参的名称不能和成员变量名称一致
* get 方法命名规范
* 有返回值,且返回值类型与成员变量类型一致
* 方法名与成员变量名一样
* 不需要接收任何参数
*/
@synthesize 只用于.m文件中,于@implementation同级;相当于做了getter和setter方法的实现;
@synthesize默认会访问跟 属性同名的变量,如果找不到同名的变量,会自动生成一个同名的私有变量 ;
@synthesize age = _age;代表getter和setter会去访问_age这个成员变量;
在xcode4.5以上的环境下 ,当含有property属性时,@synthesize可省略,编译器自动生成;并且默认会访问_age这个成员变量;
如果找不到_age这个变量 ,会自动生成一个_age的私有成员变量;
@property 字段
在.h文件中,与@interface同级,
@property int age;相当于getter,setter方法声明;
==
-(void) setAge:(int)age;
-(int)age;
命令行编译.m文件
touch xx.m 创建xx文件
open xx.m 打开xx文件
cc xx.m -framework Foundation 编译xx文件
./a.out 运行编译后的out文件
iOS继承
1,不允许子类和父类拥有相同名称的成员变量
2,调用某个对象的方法时,优先去当前对象中查找,如果找不到,去父类中调用。
继承与组合
继承: xx 属于xxx
A { int _age;}
B : A {
}
组合: xx 拥有xxx
A { int _age;}
B{
A *_a;
}
多态
1,没有继承就没有多态;
2,代码的体现:父类类型的指针指向子类对象;
3,好处:如果函数参数中使用的是父类类型,可以 传入父类,子类对象;
4,局限:父类类型的变量不能直接调用子类的特有的方法;
例:
NSString *str = [Cat new];
[str eat];
编译时显示warning;“NSString may not respond to 'eat'
但运行成功;因为oc是弱语言;
成员变量作用域
.m文件中声明的变量,默认是private,且无法修改;
.h文件中声明的变量,默认是protected;
@implementation中不能定义与@interface中同名的成员变量