zoukankan      html  css  js  c++  java
  • Object-C——核心语法(1)

     

    一、点语法

       1、概念:  我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法"。

       2、本质: 点语法的本质还是方法调用

       3、基本用法:

     1 #import <Foundation/Foundation.h>
     2 #import "Person.h"
     3 
     4 int main(int argc, const char * argv[])
     5 {
     6     Person *p = [Person new];
     7     
     8  
     9     p.age = 10; // [p setAge:10];
    10     
    11     int a = p.age; // [p age];
    12     
    13     
    14     p.name = @"Jack";
    15     
    16     NSString *s = p.name;
    17     
    18     NSLog(@"%@", s);
    19     
    20     return 0;
    21 }

    二、成员变量的作用域

         1、  @public : 在任何地方都能直接访问对象的成员变量
         2、  @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
         3、@protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)
         4、@package : 只要处在同一个框架中,就能直接访问对象的成员变量
         5、 @interface和@implementation中不能声明同名的成员变量

         6、代码举例

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 {
     5     int _no;
     6     
     7     @public // 在任何地方都能直接访问对象的成员变量
     8     int _age;
     9     
    10     
    11     @private  // 只能在当前类的对象方法中直接访问
    12     int _height;
    13     
    14     @protected // 能在当前类和子类的对象方法中直接访问
    15     int _weight;
    16     int _money;
    17 }
    18 
    19 - (void)setHeight:(int)height;
    20 - (int)height;
    21 
    22 - (void)test;
    23 @end
     1 @implementation Person
     2 {
     3     int _aaa;// 默认就是私有
     4     
     5     @public
     6     int _bbb;
     7     // @implementation中不能定义和@interface中同名的成员变量
     8     // int _no;
     9 }
    10 
    11 - (void)test
    12 {
    13     _age = 19;
    14     
    15     _height = 20;
    16     
    17     _weight = 50;
    18     
    19     _aaa = 10;
    20 }
    21 
    22 - (void)setHeight:(int)height
    23 {
    24     _height = height;
    25 }
    26 
    27 - (int)height
    28 {
    29     return _height;
    30 }
    31 
    32 @end

    三、 @property和@synthesize
         1、@property:可以自动生成某个成员变量的setter和getter声明

    1 @property int age;
    2 @property int height;

    这两句和下面的两段代码是等价的

    1 - (void)setAge:(int)age;
    2 - (int)age;
    3 
    4 
    5 
    6 - (void)setHeight:(int)height;
    7 - (int)height;

         2、 @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量

           基础用法:

     1 #import "Person.h"
     2 
     3 @implementation Person
     4 
     5 
     6 @synthesize age = _age;
     7 
     8 @synthesize height = _height;
     9 
    10 @synthesize weight = _weight, name = _name;
    11 
    12 @end


    四、id的用法

          id是万能指针,能指向或者操作任何OC对象

          用法举例

     1 #import <Foundation/Foundation.h>
     2 #import "Person.h"
     3 
     4 
     5 void test(id d)
     6 {
     7     
     8 }
     9 
    10 int main(int argc, const char * argv[])
    11 {
    12 
    13     @autoreleasepool {
    14         Person *p = [Person new];
    15   
    16         
    17         NSObject *o = [Person new];
    18         
    19         
    20       
    21    
    22         id d = [Person new];
    23         
    24         [d setAge:10];
    25         
    26         [d setObj:@"321423432"];
    27         
    28         NSLog(@"%d", [d age]);
    29     }
    30     return 0;
    31 }

    Person的.h和.m文件

     1 //.h 文件
     2 #import <Foundation/Foundation.h>
     3 
     4 @interface Person : NSObject
     5 @property int age;
     6 @property id obj;
     7 @end
     8 //.m
     9 #import "Person.h"
    10 
    11 @implementation Person
    12 
    13 @end

    五、构造方法
        1、构造方法:用来初始化对象的方法,是个对象方法,-开头

              构造过程:
                ①   分配存储空间  +alloc
                ②   初始化 -init

    1  // 1.调用+alloc分配存储空间
    2     // Person *p1 = [Person alloc];
    3     // 2.调用-init进行初始化
    4     // Person *p2 = [p1 init];
    5     
    6 //    // 调用-init进行初始化
    7 //    Person *p3 = [Person new];

        2、重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值

        3、 重写构造方法的注意点
           ① 先调用父类的构造方法([super init])
           ② 再进行子类内部成员变量的初始化

     1 #import "Person.h"
     2 
     3 @implementation Person
     4 
     5 
     6 // 重写-init方法
     7 //- (id)init
     8 //{
     9 //    // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性
    10 //    self = [super init]; // 当前对象 self
    11 //    
    12 //    
    13 //    // 2.如果对象初始化成功,才有必要进行接下来的初始化
    14 //    if (self != nil)
    15 //    { // 初始化成功
    16 //        _age = 10;
    17 //    }
    18 //    
    19 //    // 3.返回一个已经初始化完毕的对象
    20 //    return self;
    21 //}
    22 
    23 - (id)init
    24 {
    25     if ( self = [super init] )
    26     { // 初始化成功
    27         _age = 10;
    28     }
    29     
    30     // 3.返回一个已经初始化完毕的对象
    31     return self;
    32 }
    33 
    34 @end

    六、 自定义构造方法
           自定义构造方法的规范
            1、一定是对象方法,一定以 - 开头
            2、返回值一般是id类型
            3、方法名一般以initWith开

           使用方法:

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 @property NSString *name;
     5 @property int age;
     6 - (id)initWithName:(NSString *)name;
     7 
     8 - (id)initWithAge:(int)age;
     9 
    10 - (id)initWithName:(NSString *)name andAge:(int)age;
    11 
    12 @end


     

         

  • 相关阅读:
    shell 冒泡算法 解决数组排序问题
    react(二)
    react(一)
    mybatis-plus:3
    lambda
    配置中心(nacos)-控制台使用
    nacos作为配置中心的简单项目配置
    nacos作为注册中心的简单项目配置
    Vue初步学习
    nacos单例模式简单搭建
  • 原文地址:https://www.cnblogs.com/gaizuojia/p/4357268.html
Copyright © 2011-2022 走看看