OC核心语法

来源:互联网 发布:淘宝买家信誉点数查询 编辑:程序博客网 时间:2024/05/01 14:20


1.点语法

OC中点语法的本质是使用了编译器的特性,使在使用点语法时,编译器自动生成了对应的代码。

比如:

 

#import <Foundation/Foundation.h>@interface Person : NSObject{    int _age;}- (void)setAge:(int)age;- (int)age;@end@implementation Person- (void)setAge:(int)age{    _age = age;    // 会引发死循环    //self.age = age; // [self setAge:age];}- (int)age{    return _age;}@endint main(int argc, const char * argv[]){    Person *p = [Person new];        p.age = 10; // [p setAge:10];        int a = p.age; // [p age];        NSLog(@"%d", p.age);        return 0;}

点语法的目的

OC设计点语法的目的,是为了让其他语言的开发者可以很快的上手OC语言开发,使用点语法,让它和其他面向对象的语言如java很像。

点语法的使用注意

以下使用方式会造成死循环:

在set方法中,self.age=age;相当于是[self setAge:age];

在get方法中,return self.age;相当于是[self age];


2.成员变量的作用域

@public: 在任何地方都能直接访问对象的成员变量

@private: 只能在当前类的对象方法中直接访问(@implementation中默认是@private)

@protected: 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)

@package: 只要处在同一个框架中,就能直接访问对象的成员变量

注意:

@interface和@implementation中不能声明同名的成员变量

示例:

#import <Foundation/Foundation.h>@interface Person : NSObject{    int _no;        @public // 在任何地方都能直接访问对象的成员变量    int _age;        @private  // 只能在当前类的对象方法中直接访问    int _height;        @protected // 能在当前类和子类的对象方法中直接访问    int _weight;    int _money;}- (void)setHeight:(int)height;- (int)height;@end@implementation Person- (void)setAge:(int)age{    _age = age;}- (int)age{    return _age;}- (void)setWeight:(int)weight{    _weight = weight;}- (int)weight{    return _weight;}- (void)setHeight:(int)height{    _height = height;}- (int)height{    return _height;}@end
 

3.@property和@synthesize


@property

可以自动生成某个成员变量的setter和getter声明

@synthesize

自动生成某个成员变量的setter和getter实现。

同时会访问这个成员变量,如果不存在,就会自动生成@private类型的成员变量。

示例:

代码1

#import <Foundation/Foundation.h>@interface Person : NSObject// @property:可以自动生成某个成员变量的setter和getter声明@property int age;//- (void)setAge:(int)age;//- (int)age;@property int height;//- (void)setHeight:(int)height;//- (int)height;@end<pre name="code" class="html">@implementation Person// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量@synthesize age = _age;@synthesize height = _height;@end

代码2

#import <Foundation/Foundation.h>@interface Person : NSObject- (void)setAge:(int)age;- (int)age;- (void)setHeight:(int)height;- (int)height;@end<pre name="code" class="html">@implementation Person- (void)setAge:(int)age{    _age = age;}- (int)age{    return _age;}- (void)setHeight:(int)height{    _height = height;}- (int)height{    return _height;}@end

代码1和代码2的效果是一样的,最终都生成个_age和_height的set方法和get方法。

4.个人小结

OC核心语法离不开苹果开发的Xcode的编译器特性,它的很多内容都是为了迎合从事软件开发的从业者,编译器特性使得基于OC的开发细节越来越类似于其它面向对象的编程语言,特别是和java作对比。

以上的点语法和@property等关键字,都是利用编译器特性生成相应的代码,减少了编程人员大量的重复代码,其中点语法使OC对象的使用和属性的访问变得和其它语言越来越接近,让更多的软件开发人员可以更快的上手OC开发。

0 0