类的创建
声明:就是对的概括说明,它是给使用该的人看的
1. 确定类名
2. 要继承NSObject,是为了让类有创建对象的能力
3. 声明必须以@interface 开头 以@end结尾
4. 声明属性,必须在@interface 与@end之间的大括号中
声明属性的时候不可以对属性进行初始化
5. 声明方法,必须在{} 与 @end之间进行声明,不可以有方法的实现
格式:方法类型标识符 (返回值类型) 方法名:(参数类型) 参数名称 方法名:(参数类型) 参数名称实现:实现声明所有的方法
必须写在@implementation 与@end@interface Person : NSObject { int _age; } -(void) fun; @end @implementatial Person -(void) fun { } @end
对象方法与类方法
对象方法:
1. 声明和实现方法时候,以 -开头
2. 对象方法是隶属于对象,只能通过对象调用
3. 对象方法中可以直接访问成员变量,因为对象方法和成员变量都是隶属于该对象的
4. 对象方法中可以调用其他对象方法
5. 对象方法中也可以调用类方法
类方法:
1. 声明和实现的标识符都是 +
2. 类方法它是属于类本身的
类方法优点:
1. 调用类方法不用创建对象,所以节省内存
2. 通过对象调用对象方法,首先要通过对象找他isA指针,然后在去类中找相应的方法,所有比较慢
@interface ZZPerson : NSObject
{
@public
int _age;
NSString * _name;
}
- (void) setAge:(int) age;
+ (int) sumOfNum:(int)num andOther:(int) other;
@end
@property属性声明
在Xcode4.4之后,对象@property进行了一个增强
1. 直接在类的声明中可以通过@property生成setter 和 getter 方法的声明和实现
2. 同时它还好生成一个私有的成员变量 _属性名称
在使用@property增强的时候如何自定义setter方法
1. 如果你实现自定义的setter方法,@property就不会帮你生成它的setter方法,但仍然会帮你生成getter方法和私有的成员变量
2. 如果你实现自定义的getter方法,@property就不会帮你生成它的getter方法,但仍然会帮你生成setter方法和私有的成员变量
3. 如果你同时实现自定义的setter 和 getter方法,@property就不会帮你生成它的setter 和 getter方法,同时也不会帮你生成私有成员变量了
@interface ZZPerson : NSObject
//年龄
@property (nonatomic, assign) int age;
//姓名
@property (nonatomic, copy) NSString *name;
@end
id类型
id 类型是一个万能对象指针类型,它可以指向任意类对象
id 类型本身就是一个指针类型,接收对象时候不要再加 * 了;
id:缺点:
1. 所有它任意对象上的方法它都可以调用,但如果这个对象上不存在这个方法,那再运行时就报错
2. 它不会进行编译时的检查
3. 当是用id类的变量去调用一个方法的时候,它会提示很多类似方法,不容易找到自己对象上的方法
构造方法
构造方法可以用类方法和对象方法构造。
// .h
@interface ZZPerson : NSObject
@property int age;
//instancetype 相对于id类型,它会自动进行类型检查,如果不一致就会报一个警告
//instancetype 只可以作为返回类型
//简便构造方法,都是以类名去掉前缀然后小写首字母开头
+ (instancetype) personWithAge:(int) age;
//初始化对象方法
- (instancetype) initWithAge:(int) age;
@end
// .m
@implementation ZZPerson
+ (instancetype) personWithAge:(int) age
{
return [[self alloc] initWithAge:age];
}
- (instancetype) initWithAge:(int) age
{
if (self = [super init]) {
self.age = age;
}
return self;
}
@end
重写init必须要做三件事
1. 必须要调用父类init
2. 必须检验父类的init是否成功初始化
3. 返回自己指针