天天看点

Objective-C语法学习归纳

self关键字

类似java中的this,防止局部变量将成员变量覆盖、冲突

//使用方法
-(void) setAge:(int)age
{
self->age = age;
}

-(int)age
{
return self->age;
}
           

self 调用方法:  [self 方法名]; self调用方法时要注意避免调用自己,否则造成死循环。

点语法

除了get和set的调用,oc中提供了另一种可以实现get、set的调用语法,称为点语法。它的本质就是get、set。当使用点语法获取值当时候,系统调用相关的get方法,

//Student.h
#import <Foundation/Foundation.h>

@interface Students : NSObject
{
@private
    int _age;
    
}

-(int) age;
- (void) setAge:(int)age;
@end

//Student.m
#import "Students.h"

@implementation Students

-(void) setAge:(int)age
{
    self->_age = age;
}

-(int) age
{
    NSLog(@"age = %d",_age);
    return self->_age;
}

@end

//main

#import <Foundation/Foundation.h>
#import "Students.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Students *stu = [[Students alloc]init];
        stu.age=18;   <span style="font-family: Arial, Helvetica, sans-serif;">//等同于 [stu setAge:18];</span>
           
int age =stu.age; <span style="font-family: Arial, Helvetica, sans-serif;">//等同于 int age = [stu age];</span>
           
}    return 0;
}
           

若在set、get中使用点语法,会造成循环引用。

属性

oc定义成员变量时,先对其进行封装,之后提供ge、set提供外界访问操作,但其过于繁琐,增大工作量,为此,oc提供了属性,可以替代set、get方法。 属性对声明: 以关键字@property开头,它可以出现在一个类的@interface代码部分的方法声明列表中的任何位置。 语法格式: @property(特性1,特性2……) 变量类型 变量名; 括号中的特性是可选的, 它是对属性行为的描述。 示例: @property int age;  等同于:

{
@private int _age;
    
}

-(int) age;
- (void) setAge:(int)age;
           

description 方法

类似于java中的toString。若要用NSLog打印对象,需要重写description方法。 否则只会答应出对象的内存地址。