定义类和创建对象
- 创建类
- 使用@interface 关键字创建类,并且使类继承NSObject
- @interface负责声明、@implementation负责实现
函数和方法的区别
- 方法
- 必须以减号或加号开头
- 减号开头的是对象方法,加号开头的是类方法
- 实现必须写在@implementation和@end之间
- 声明必须写在@interface和@end之间
- 必须由对象调用
- 归类、对象所有
- 函数
- 函数调用不依赖对象
- 函数内部不能直接通过成员变量名访问对象的成员变量
- 可以写在文件的任何地方,但不能写在@interface中
- 可以写在@implementation和@end之间,也可以被方法调用
对象方法与类方法的区别
- 对象方法
- 减号开头
- 只能由对象调用
- 实例变量不能在类方法中访问
- 对象方法可以调用类方法
- 类方法
- 加号开头
- 只能由类来调用
- 应用场合:当方法内部不需要使用成员变量时,就可以改为使用类方法
self关键字
- self是指针类型
- 它指向了方法调用者,谁调用了这个方法就指向谁
- 用途:
- 可以利用 self -> 成员变量名 访问当前对象内部的成员变量
- [self 方法名]可以调用其他对象方法、类方法,取决于self在什么环境中
- self出现在对象方法中,self就代表对象
- self出现在类方法中,self就代表类
- 要避免自己调用自己的方法而发生死循环,例如有个test方法
- [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方法
- 获取字符串的长度
- 返回unisgned long
- stringWithFormat
- 动态创建字符串,根据传入的值
- 返回NSString
- 示例:
NSString *newstr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@“,age,no,name];
来源:oschina
链接:https://my.oschina.net/u/998474/blog/219415