//写代码的一条重要性:就是代码编写规范,尤其是xcode编写对格式的对齐有关系,在下面的代码没有怎么对齐的情况下出现30个警告
//一般oc程序的头文件
#import <Foundation/Foundation.h>
typedef enum {
SexMan,
SexWoman
} Sex;
//类的声明
@interface Student : NSObject
{
int _age;
// int no;
Sex _sex;
}
-(void)setAge:(int)newAge;
-(int)age;
-(void)setSex:(Sex)sex;
-(Sex)sex;
-(void)study;
@end
//类的实现
@implementation Student
-(void)setAge:(int)newAge
{
//_age成员变量传值的过滤
// 对传进来的参数进行过滤
if (newAge <= 0)
{
newAge = 1;
}
_age=newAge;
}
-(int)age
{
return _age;
}
-(void)setSex:(Sex)sex
{
_sex=sex;
}
-(Sex)sex
{
return _sex;
}
-(void)study
{
NSLog(@"%d岁的还在学习",_age);
}
@end
//主函数
int main()
{
//创建Student类的一个对象stu
Student *stu=[Student new];
//对age进行传值
[stu setAge:10];
[stu setSex:SexMan];
[stu sex];
[stu age];
[stu study];
return 0;
}
[email protected] Student : NSObject
NSObject是一个root class 根类
加上:NSObject为了保证@interface Student 有创建Student类的能力
2.成员变量 一定要加下划线_开头
目的是为了避免get方法返回的值为成员变量而不是get方法的歧义;
3.调用对象没有的方法 只是警告,只有在运行过程中报错,提示:找不到该对象方法
4.对象方法 -对象调用 对象方法里可以调用类方法
5.类方法 +类调用 类方法不能访问成员变量
6.self : 指针指向调用方法的对象
可以利用self->成员变量名 访问当前对象的成员变量
self 方法名 则调用其他对象方法、类方法
ARC为iOS 5推出的新功能,全称为ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,
原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。Xcode 4.2已开始使用该功能;
继承
NSObject为Foundation下系统最基本的类 根类 系统自带的类 root class
在NSObject类中有new方法 为类方法
系统有2个根类,还有一个是NSProxy 代理类 根类 root class
继承的好处:1.抽取重复代码
2.建立类之间的关系
3.子类可以拥有父类中的所有成员变量和方法
子类与父类不能相同的成员变量,但是可以有相同的方法,即为:重写
子类重新实现父类中某一方法 覆盖父类的方法
父类声明必须写在子类前面
调用方法:先从当前对象找方法,找不到再到父类中找
每个对象都一个isa指针
每个类中有一个superclass指针
继承的缺点是:耦合性太强了
使用场合:当两个类拥有相同的属性和方法的时候,就可以抽取相同的东西到一个父类
A类拥有B类的部分属性和方法,可以考虑B类继承A类
不是任何情况下都可以,需要逻辑通过
逻辑不合理的话,可以使用组合的方式使用
继承:xx是xxx
组合:xxx拥有xxx
super的作用
1.直接调用父类的某个方法
2.super处在对象方法中,那就调用父类对象方法
3.super处在类方法中,那就调用父类的类方法
4.使用场合:子类重写父类的方法时,保留父类的一些行为
多态:
父类指针指向子类对象
Animal *a = [Dog new];
在编译中a为Animal的对象,但是在调用时会检测对象的真实形象为Dog的对象
[a eat];
多态的局限性:父类类型的变量不能用来调用子类的方法
Animal *aa = [Dog new];
// [aa run]; 报警告 run为Dog的方法
Dog *dd = (Dog *)aa; 将aa转为Dog *类型的变量
[dd run];
多态:1.没有继承就没有多态
2.代码的体现:父类类型的指针指向子类对象
3.好处:如果函数方法方法参数中使用的是父类类型,可以传入父类、子类对象
4.局限性:父类类型的变量不能直接调用子类特有的方法,需使用强制类型
NSString:
char *name = "itcast"
NSString *str = @"itcatst";
NSLog(@"%s",name);
NSLoge(@"我在%@上课",str);
NSString *newStr=[NSString stringWithFormat:@My age is %d and no is %d
and name is %@", age, no, name]
NSLog(@"---%@", newStr);
length方法算的是字数 int size = [name length]
NSLog(@"---%d",size);
NSLog(@"---%ld",[newStr length]);
编写代码的格式规范的重要性:
= 两边留空格
#include <math.h> 应修改使用为OC的格式 #import <math.h>
备注在 // 两边留空格
distanceWithOther 距离 与 其他
Circle 圆 Point 点
isInteractWithOther 是否相交 BOOL类型
只有利用类名调用类方法的时候,不需要 在类名后面写*
其他情况下 类名后面统一加上一个*