定义类和建立对象
- 建立类
- @interface负责声明、@implementation负责实现
函数和方法的区别
- 方法
- 必须以减号或加号开头
- 减号开头的是对象方法,加号开头的是类方法
- 实现必须写在@implementation和@end之间
- 声明必须写在@interface和@end之间
- 必须由对象调用
- 归类、对象全部
- 函数
- 函数调用不依赖对象
- 函数内部不能直接经过成员变量名访问对象的成员变量
- 能够写在文件的任何地方,但不能写在@interface中
- 能够写在@implementation和@end之间,也能够被方法调用
对象方法与类方法的区别
- 对象方法
- 减号开头
- 只能由对象调用
- 实例变量不能在类方法中访问
- 对象方法能够调用类方法
- 类方法
- 加号开头
- 只能由类来调用
- 应用场合:当方法内部不须要使用成员变量时,就能够改成使用类方法
self关键字
- self是指针类型
- 它指向了方法调用者,谁调用了这个方法就指向谁
- 用途:
- 能够利用 self -> 成员变量名 访问当前对象内部的成员变量
- [self 方法名]能够调用其余对象方法、类方法,取决于self在什么环境中
- self出如今对象方法中,self就表明对象
- self出如今类方法中,self就表明类
- 要避免本身调用本身的方法而发生死循环,例若有个test方法
- 避免在类方法中使用self调用对象方法
super关键字
- super的做用
- 直接调用父类中的某个方法
- super处在对象方法中,name就会调用父类的对象方法
- super处在类方法中,那么就会调用父类的类方法
- super的使用场合
- 子类重写父类的方法时,想保留父类的一些行为(方法)
常见错误
- @end不能嵌套
- 方法的声明不能写在@implementation里面
- 方法的实现不能写在@interface里面
- @interface是配对出现的,中间不能嵌套任何东西
- 成员变量不容许在@interface里面进行初始化
- 不能随便把成员变量当成C语言中的变量
- 不能用static修饰成员变量和方法
- 类的声明要放在建立对象前面
面向对象的三大特性
- 设置setter方法
- 设置getter方法
- 成员变量要与getter和setter方法参数变量区别开来,成员变量要与_下划线开头
- OC是弱语言,因此只写实现不写声明,方法照样能够运行,可是不推荐这么使用
- 全部类的根类都是NSObject
- 继承使用冒号:符号表示,冒号左边是子类,右边是父类(SuperClass)超类
- 继承的好处
- 抽取重复的代码
- 创建了类之间的关系
- 子类能够拥有父类中全部成员变量和方法
- 继承的坏处
- 使用注意
- 父类的类声明必须写在子类的声明前面,实现能够写在后面
- 重写:子类从新实现父类中的某个方法,并覆盖父类方法
- 子类不能和父类拥有相同的成员变量
- new方法是在NSObject中定义的类方法
- NSObject是基类
- 继承使用的场合
- 当两个类拥有相同属性和方法的时候,就能够将相同的东西抽取到一个父类中
- 当A类拥有B类的部分属性和方法时,能够考虑让B类继承A类
- 组合
- 当A类不是B类的子类,可是又要使用B类,能够考虑组合,将B类型声明为成员变量在A中
- 没有继承就没有多态
- 代码的体现:父类类型的指针指向子类对象,例如:
- Person *p = [Student new]; //此时p指向子类Student的实例
- 多态的好处
- 若是函数、方法参数中使用时是父类型,能够传入父类、子类对象
- 多态的局限
- 父类类型的变量不能直接调用子类特有的方法
- 父类只能调用父类和子类都有的方法,可是经过强制转换为子类型,就能够调用
- 使用注意
NSString字符串类型
- OC中使用%@控制符号输出NSSString字符串内容到屏幕上
- 示例:建立一个字符串
- NSString *str = @“luoguankun”;
- length方法
- stringWithFormat
- 动态建立字符串,根据传入的值
- 返回NSString
- 示例:
NSString *newstr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@“,age,no,name];