OC语法

类的创建

  • 声明:就是对的概括说明,它是给使用该的人看的
    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. 返回自己指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值