美文网首页
<<好学的Objective-C>>

<<好学的Objective-C>>

作者: 洧中苇_4187 | 来源:发表于2020-10-15 16:03 被阅读0次
    基础类型数据表

    源码编译:

    1.预编译;为编译代码做准备,比如移除注释,重排某些指令,使其更高校.
    2.编译;将源代码转变成目标文件,扩展名为 .o.
    3.链接;将上一步生成的目标文件连接起来,生成可执行文件,库和框架也会被链接到可执行文件中.

    几个关键字的区别 static, register, extern, const
    static: 整个应用运行期间只分配一次内存
    register: 它修饰的变量会被经常访问,多用于寄存器中
    extern: 它修饰的变量引用了另外一个变量.
    cons: 它修饰的变量是只读的,在初始化之后便不能修改.

    结构体定义格式: typedef 变量定义 新类型名。

    #import "ViewController.h"
    typedef struct {
        float x;
        float y;
    }YPPoint;
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        YPPoint p;
        p.x = 1.98;
        p.y = 2.36;
       
    }
    

    枚举的使用

    #import "ViewController.h"
    enum YPEnum
    {
      MsgType1 = 199,
      MsgType2,
    };
    @interface ViewController ()
    @property(assign,nonatomic) enum YPEnum myEnum;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.myEnum = MsgType1;
    }
    

    指针

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        int x = 5;
        int *y = &x;
        
        NSLog(@"%p %p %p",x,&x,y);
    }
    
    打印结果:
    0x5 0x7ffeeee029fc 0x7ffeeee029fc
    可以看出,变量x存放的是常量5, 而变量x的内存地址是0x7ffeeee029fc,
    而y是指向整形的指针,它存储的是x的地址
    
    
    void myFunction(int a, int *b)
    {
        a = 20;
        *b = 28;//反引用指针以访问原始值
        NSLog(@"%d %d",a ,*b);
    }
    

    KVC的一些骚操作

    NSArray *array = @[@1, @2, @3, @4, @10];
         
        NSNumber *sum = [array valueForKeyPath:@"@sum.self"];
        NSNumber *avg = [array valueForKeyPath:@"@avg.self"];
        NSNumber *max = [array valueForKeyPath:@"@max.self"];
    
        NSArray *array1 = @[@"name", @"w", @"aa", @"ZXPing"];
        NSLog(@"%@", [array1 valueForKeyPath:@"uppercaseString"]);
    
    
    
        NSArray *threeDimensionalArray = @[
        @[
            @[ @"Peter", @"Paul", @"Mary" ], @[ @"Joe", @"Jane" ]
            ],
        @[
            @[ @"Alice", @"Bob" ]
            ]
        ];
        NSArray *flattenedArray = [threeDimensionalArray valueForKeyPath: @"@unionOfArrays.self.@unionOfArrays.self"];
    

    为什么OC中没有多继承
    B,C 类的父类都继承了A;B,C类中都实现了A类的-(void)method方法,假设D类多继承B,C类,当D类调用-(void) method方法时,就会出现二义性的问题,因为B,C类都有可能实现了-(void) method方法.

    多继承导致的二义性问题

    协议扩展

    //NetWorkHelperDelegate.h
    @protocol NetWorkHelperDelegate <NSObject>
    @required
    - (void)configHelperWithID:(NSString *)userId;
    @end
    
    //NetWorkHelperDelegate.h
    @protocol NetWorkClientDelegate <NetWorkHelperDelegate>
    @optional
    - (void)checkNetWork;
    @end
    
    //ViewController.m  这样在只遵守 NetWorkClientDelegate 的情况下就可以实现两个代理的调用
    @interface ViewController ()<NetWorkClientDelegate>
    @end
    
    @implementation ViewController
    #pragma mark - NetWorkClientDelegate
    - (void)configHelperWithID:(NSString *)userId
    { 
    }
    - (void)checkNetWork
    {
    }
    

    关联对象

    关联策略说明

    预编译指令

    image.png

    相关文章

      网友评论

          本文标题:<<好学的Objective-C>>

          本文链接:https://www.haomeiwen.com/subject/xxhvpktx.html