美文网首页
Objective-C语言特性

Objective-C语言特性

作者: 宙斯YY | 来源:发表于2019-06-26 16:47 被阅读0次
    1.Foundation和Core Foundation对象有什么区别?

    Foundation对象是Objective-C对象,而Core Foundation对象是C对象,二者比较相似,Foundation下的类基本都是NS开头,Core Foundation下的类基本是CF开头的。

    这里说一下两者在iOS中的内存管理问题,以前在MRC情况下,都是开发人员手动管理对象内存,二者区别不大。但在ARC情况下,由于Foundation框架是OC对象,所以由系统自动管理内存,而Core Foundation框架是C对象,所以需要开发人员手动管理内存,不然会引起内存泄露。

    在ARC下,可以对两个框架的类进行相互转换,以NSString为例,有与之对应的CFStringRef,两者之间可以通过__bridge、__bridge_transfer、__bridge_retained转换:

    __bridge:用于NSString与CFStringRef相互转换,不改变对象的管理权所有者,按照本来对象的内存管理。本来是NSString,转换为CFStringRef类型,依旧由系统管理;本来是CFStringRef,转换为NSString,由开发人员管理。

        //ARC管理Foundation对象
        NSString * s1=@"string";
        //转换后依然由ARC管理释放
        CFStringRef cfstring=(__bridge CFStringRef)s1;
        //开发者手动管理Core Foundation对象
        CFStringRef cfstring2=CFStringCreateWithCString(NULL, "string",kCFStringEncodingASCII);
        //转换后仍然需要手动管理内存对象
        NSString * s2=(__bridge NSString*)cfstring2;
    

    __bridge_transfer:用于CFStringRef转换成NSString,进行管理权移交,由系统自动管理。

        //开发者手动管理Core Foundation对象
        CFStringRef cfstring=CFStringCreateWithCString(NULL, "string",kCFStringEncodingASCII);
        //转换后由ARC管理对象释放,不用担心内存释放
        NSString * s=(__bridge_transfer   NSString*)cfstring;
    

    __bridge_retained:用于NSString转换成CFStringRef,剥夺了ARC管理权,需要开发人员手动管理。

        //ARC管理Foundation对象
        NSString * s=@"string";
        //转换后不由ARC管理释放。需手动释放
        CFStringRef cfstring=(__bridge_retained CFStringRef)s;
    
    2.属性和成员变量有什么区别?

    属性包括成员变量(_成员变量名)和它的setter,getter方法。成员变量对外界是私有的,属性对外界是公共的。

    @interface Person : NSObject
    {
        //成员变量
        NSString* age;
    }
    //属性
    @property(nonatomic,copy)NSString * name;
    
    -(void)test;
    
    @end
    
    @implementation Person
    
    -(void)test
    {
        age=@"10";
        NSLog(@"%@",age);
        
        _name=@"ZS";
        NSLog(@"%@ %@",self.name,_name);
        self.name=@"LL";
        NSLog(@"%@ %@",self.name,_name);
    }
    @end
    

    相关文章

      网友评论

          本文标题:Objective-C语言特性

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