黑魔法

作者: Vijay_ | 来源:发表于2017-11-27 01:13 被阅读8次

    非空代码块

    NS_ASSUME_NONNULL_BEGIN
    @interface person : NSObject
    //在此处的所有成员属性和方法都是非空的
    @end
    NS_ASSUME_NONNULL_END
    
    

    kCFNull是不同于nil Nil Null(三者一样)的kCFNull是NSNull的单例指针 也就是[NSNull null]获取的对象 用于做数组的空占位符 是对象但是是一个没意义的对象

     NSLog(@"%li",[[NSArray arrayWithObjects:@1,@2, [NSNull null],@3,nil] count]);//这样写数组就有4个 第3个是空的占位符
     NSLog(@"%li",[[NSArray arrayWithObjects:@1,@2, nil,@3,nil] count]);//这样写数组只有2个 到第三个就结束了
    //判断是否为空占位符时需要用 $obj == (id)kCFNull 来判断
    

    方法需要传枚举参数 但是使用时又不想传枚举值时可以使用kNilOptions(其实是0)

    @protected 该类和所有子类中的方法可以直接访问这样的变量。//默认
    @private 该类中的方法可以访问,子类不可以访问。
    @public 可以被所有的类访问
    @package 本包内使用,跨包不可以
    $obj->xxx 表示访问某个对象的某个成员变量

    取变量内存地址值 &变量 例子:int i;NSLog(@"%li",&i);

    常量无(任意)类型指针 const void *xxx;
    变量无(任意)类型指针 void *xxx;

    定义静态方法

    static NSInteger xxx(NSInteger i){
        return i ;
    }
    

    CFMutableDictionaryRef CFDictionaryRef (可以用任意类型作为key)

    //创建一个CFMutableDictionaryRef引用
    CFMutableDictionaryRef ref =  CFDictionaryCreateMutable(CFAllocatorGetDefault(), 2, 
    //系统默认提供了键值的回调常量 
    &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
        NSArray *key = @[@"name"];
        NSString *value = @"vijay";
        CFDictionarySetValue(ref, (void *)key, (void *)value);
        NSLog(@"%@",ref);
    
    //CFDictionaryRef
    CFStringRef keys[1];
        keys[0] = CFSTR("name");
        CFStringRef values[1];
        values[0] = CFSTR("vijay");
        CFDictionaryRef ref =  CFDictionaryCreate(CFAllocatorGetDefault(), (void *)keys, (void *)values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
        NSLog(@"%@",ref);
    

    获取某个类的成员属性(成员变量) 和方法

     Dog * dog = [[Dog alloc] init];  
          
        unsigned int outCount = 0;  
          
        unsigned int outCountMethod = 0;  
          
        Ivar * ivars = class_copyIvarList([dog class], &outCount);  
          
        Method * methods = class_copyMethodList([dog class], &outCountMethod);  
          
        for (int i = 0; i<outCount; i++) {  
            // 取出i位置对应的成员变量  
            Ivar ivar = ivars[i];  
              
            // 查看成员变量  
            const charchar *name = ivar_getName(ivar);  
              
              
            NSLog(@"%s", name);  
        }  
          
        for (int j = 0; j < outCountMethod; j++) {  
              
            Method method = methods[j];  
              
            SEL methodSEL = method_getName(method);  
              
            const charchar * selName = sel_getName(methodSEL);  
              
            if (methodSEL) {  
                NSLog(@"sel------%s", selName);  
            }  
        }  
    
    

    手动立即释放一个对象

    //自动计数引用需要等到runloop完成后才调用对象的delloc释放
    //free()可以直接释放该内存
    free();
    

    相关文章

      网友评论

          本文标题:黑魔法

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