精华内容
下载资源
问答
  • 成员变量 1、成员变量的定义 Ivar: 实例变量类型,是一个指向objc_ivar结构体的指针 typedef struct objc_ivar *Ivar; 2、相关函数 // 获取所有成员变量 class_copyIvarList // 获取成员变量名 ivar_getName // ...
  • 1.局部变量 在方法内部的{}中定义的...被@property修饰的变量都是属性变量,定义属性变量的时候系统默认生成一个带 “_” 的成员变量 在.h{}中声明的成员变量默认是protected的,外部不能访问,要加@public修饰外部

    1.局部变量

    在方法内部的{}中定义的变量都是局部变量,局部变量的生命周期是是{}结束

    2.成员变量

    在.h文件中的{}中生命的变量都是成员变量,成员变量的生命周期是这个类

    3.属性

    被@property修饰的变量都是属性变量,定义属性变量的时候系统默认生成一个带 “_” 的成员变量

    在.h{}中声明的成员变量默认是私有的,外部不能访问,要加@public修饰外部才可以访问


    OC中类的成员变量默认都是私有的,而属性和方法默认都是公有的


    展开全文
  • 一个类,有时候搞不清楚到底用成员变量还是属性。 如: 成员变量 public string Name; 或者用属性 private string name public string Name{ get { return name; } set { name = value; } } 属性成员...
  • 1.属性用 @property 修饰 自动生成getter 和 setter 方法 直接可以用点语法访问 有原子属性和非原子属性2.成员变量成员变量 无论在 .h 和 .m文件中 用大括号 扣起来,在里面写,不能直接用点语法进行访问...

    1.属性

    用 @property  修饰 

    自动生成getter 和 setter 方法 直接可以用点语法访问 有原子属性和非原子属性

    2.成员变量

    成员变量 无论在 .h 和  .m文件中  用大括号 扣起来,在里面写,不能直接用点语法进行访问

    展开全文
  • OC学习之Runtime之一成员变量属性

    千次阅读 2015-09-14 15:59:07
    坚持 成长 每日一篇OC的成员变量和属性成员变量:就是定义了一个类的全局变量(不直接被外部访问,只能通过方法读或写) 属性:提供了get和set的成员变量。(直接能被外部读写,其实就是能通过.调用法读或写)由此可知:...

    坚持 成长 每日一篇

    OC的成员变量和属性

    成员变量:就是定义了一个类的全局变量(不直接被外部访问,只能通过方法读或写)
    属性:提供了get和set的成员变量。(直接能被外部读写,其实就是能通过.调用法读或写)

    由此可知:在OC里面一个属性是和一个成员变量密切相关联的。当我们默认声明一个属性如果没有关联相应的成员变量会默认生成一个以下划线开头+属性名的成员变量。

    成员变量操作函数

    Ivar是成员变量结构体objc_ivar指针其定义如下

    typedef struct objc_ivar *Ivar;

    objc_ivar结构体定义如下:

    struct objc_ivar {
        char *ivar_name                                          OBJC2_UNAVAILABLE;
        char *ivar_type                                          OBJC2_UNAVAILABLE;
        int ivar_offset                                          OBJC2_UNAVAILABLE;
    #ifdef __LP64__
        int space                                                OBJC2_UNAVAILABLE;
    #endif
    } 

    对该结构体的操作函数我们用ivar开头

    //获取成员变量名const char * ivar_getName ( Ivar v );  
    //获取成员变量类型编码const char * ivar_getTypeEncoding ( Ivar v ); 
    //获取成员变量的偏移量

    ptrdiff_t ivar_getOffset ( Ivar v ); 

    获取类中指定名称实例成员变量的信息

    这个函数能够获取父类以上类定义的所有成员变量

    Ivar class_getInstanceVariable ( Class cls, const char *name );

    获取类成员变量的信息

    OC似乎没有类成员变量,这个函数目前还不知道怎么用

    Ivar class_getClassVariable ( Class cls, const char *name );

    添加成员变量

    BOOL class_addIvar ( Class cls, const char *name, size_t size, uint8_t alignment, const char *types );

    注意:不管是系统库提供的提供的类,还是我们自定义的类,都无法动态添加成员变量。但如果我们通过运行时来创建一个类的话,又应该如何给它添加成员变量呢?这时我们就可以使用class_addIvar函数了。不过需要注意的是,这个方法只能在objc_allocateClassPair函数与objc_registerClassPair之间调用。

    获取整个成员变量列表

    Ivar * class_copyIvarList ( Class cls, unsigned int *outCount );

    注意:返回的列表不包含父类的成员变量和属性。
    例子:

        unsigned int outCount = 0;
        Ivar *vars = class_copyIvarList([self class], &outCount); // 获取到所有的成员变量列表
        NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
        // 遍历所有的成员变量
        for (int i = 0; i < outCount; i++) {
            Ivar ivar = vars[i]; // 取出第i个位置的成员变量
            const char *propertyName = ivar_getName(ivar); // 获取变量名
            const char *propertyType = ivar_getTypeEncoding(ivar); // 获取变量类型
            NSString *propertyNameString = [NSString stringWithUTF8String:propertyName];
            NSString *propertyTypeString = [NSString stringWithUTF8String:propertyType];
            [dic setValue:propertyTypeString forKey:propertyNameString];
        }
    

    属性操作

    objc_property_t
    objc_property_t是表示Objective-C声明的属性的类型,其实际是指向objc_property结构体的指针。
    注意:这里的objc_property在库中没有找到定义,网上很多资料把objc_property_attribute_t当作objc_property结构体定义。但是objc_property_attribute_t其实是保存属性的一些其他信息如关联的成员变量,类型,引用类型等。

    typedef struct objc_property *objc_property_t; 

    下面是objc_property_attribute_t定义:

    typedef struct {
        const char *name;           /**< The name of the attribute */
        const char *value;          /**< The value of the attribute (usually empty) */
    } objc_property_attribute_t;

    获取指定的属性

    objc_property_t class_getProperty ( Class cls, const char *name );

    获取属性列表

    这里获取属性的列表是不获取父类的属性,只获取自身属性列表。

    objc_property_t * class_copyPropertyList ( Class cls, unsigned int *outCount );

    //属性操作

    //cout用于保存取出了多少属性
    unsigned int outCount = 0;
    objc_property_t * properties = class_copyPropertyList([Person class], &outCount);
    for (int i = 0; i < outCount; i++) 
    {
         objc_property_t property = properties[i];
         NSLog(@"property's name: %s", property_getName(property));
    }
    
    free(properties);//最后必须用free释放

    为类添加属性

    感觉这个方法好鸡肋,成功添加了属性但是不能用点调用法调用,还是用关联对象比较好用一点。

    BOOL class_addProperty ( Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount );

    例子

    //给已经有的Person类添加属性littleName。
            objc_property_attribute_t type = { "T", "@\"NSString\"" };//属性类型为NSString
            objc_property_attribute_t ownership = { "C", "copy" }; // C = copy
            objc_property_attribute_t backingivar  = { "V", "_littleName" };//_littleName为Person类的全局变量,这里是让新属性与之关联
            objc_property_attribute_t attrs[] = { type, ownership, backingivar };
            class_addProperty([Person class], "littleName", attrs, 3);
    //验证是否添加成功        
            objc_property_t pt =  class_getProperty([Person class], "littleName");
            NSLog(@"property's name: %s", property_getName(pt));
            NSLog(@"property'attribute:%s",property_getAttributes(pt));
            NSLog(@"property'release:%s",property_copyAttributeValue(pt, "C"));
            NSLog(@"property'type:%s",property_copyAttributeValue(pt, "T"));
            NSLog(@"property'value:%s",property_copyAttributeValue(pt, "V"));
    //之后我们可以用KVC操作这个属性

    替换类的属性

    void class_replaceProperty ( Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount );

    获取属性名

    const char * property_getName ( objc_property_t property ); 

    获取属性特性描述字符串

    const char * property_getAttributes ( objc_property_t property ); 

    获取属性中指定的特性

    char * property_copyAttributeValue ( objc_property_t property, const char *attributeName ); 

    实例:

    NSLog(@"property'type:%s",property_copyAttributeValue(property, "T"));//"T"表示获取该属性的类型
    NSLog(@"property'value:%s",property_copyAttributeValue(property, "V"));//"V"表示获取该属性关联的成员变量

    获取属性的特性列表

    objc_property_attribute_t * property_copyAttributeList ( objc_property_t property, unsigned int *outCount ); 

    注意:
    1.property_copyAttributeValue函数,返回的char *在使用完后需要调用free()释放
    2. property_copyAttributeList函数,返回值在使用完后需要调用free()释放。
    3. 获取属性列表其实是获取的属性名是不带下划线的属性名。所以如果想很好的遍历属性名可以通过获取属性列表函数。

    展开全文
  • java属性成员变量的区别

    万次阅读 多人点赞 2018-08-28 15:51:58
    很多人都认为java中属性就是成员变量,其实不然;那他们有什么区别呢?让我们通过以下代码来理解: public class Person { private String name; private int age; private String gender; public String ...

    很多人都认为java中属性就是成员变量,其实不然;那他们有什么区别呢?让我们通过以下代码来理解:

    public class Person {
    	private String name;
    	private int age;
    	private String gender;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public float getHeight() {
    		return 1.75f;
    	}
    	public void setHeight(float height) {
    	}
    	
    }

    Person类中定义了3个字段 age、name、gender它们是类成员变量,但它们不全是属性;那什么是属性?

        属性的定义规则是:set/get方法名,去掉set/get后,将剩余部分首字母小写得到的字符串就是这个类的属性。

    所以呢name、age、height就是Person类的属性。(注:尽管这个height不是成员变量,但当外部类调用Person对象时还会有height这个属性)。

    展开全文
  • 属性实际上和成员变量没什么区别,属性代表类的某种特征, 让人更好理解而已. 使用中注意问题:1、属性名和变量名不能相同, 2、一般变量都是private,属性都是public的,属性用于给类外调用,变量限于类内使用,感觉封装性...
  • OC中成员变量属性变量

    千次阅读 2017-08-30 17:01:33
    做一个关于 OC中成员变量属性变量区别的笔记。 OC中@interface,默认的访问权限是protected。@implementationssh声明成员变量,默认的访问权限是private。@property创建的属性变量默认是public。 1.使用方式 ...
  • 成员变量: @interface MyViewController :UIViewControlle  {  UIButton *yourButton;   int count;   id data;  }  成员变量用于类内部,无需与外界接触的变量,成员变量默认是protected,一般...
  • 成员变量:@interface MyViewController :UIViewControlle { UIButton *yourButton; int count; id data; } 成员变量用于类内部,无需与外界接触的变量。成员变量默认是protected,一般情况下,非子类对象...
  • iOS成员变量、成员属性和点语法

    千次阅读 2016-03-12 12:21:53
    iOS成员变量、成员属性和点语法 1、成员变量 实例变量+基本数据类型变量 = 成员变量 > 在接口 @interface 大括号里面的统称为“成员变量”,除去基本数据类型int float ....等,其他类型的变量都叫做实例变量。系统...
  • //成员变量(字段)、实例变量(表示该Id变量既属于成员变量又属于实例变量) private String name;//成员变量(字段)、实例变量 public int age;//成员变量(字段)、实例变量(这里用来举例子,在实际中一般都会设置为...
  • @interface Myview : UIView{ ...在{ }中的便是成员变量成员变量算是私有的,没有get,set方法,需要自己重写才可以被外界访问,而实例变量是成员变量的一种特殊形式,即类,上面的UIButton的button就是一个实例变...
  • C#属性成员变量的区别?

    千次阅读 2012-12-07 20:26:49
    C#属性成员变量的区别? 一个类,有时候搞不清楚到底用成员变量还是属性。 如: 成员变量 public string Name; 或者用属性 private string name public string Name { get { return name;...
  • object-c定义属性成员变量的区别

    千次阅读 2015-12-14 21:33:04
    object-c定义属性成员变量的区别:1、关于@synthesize object = _object: 我们经常这样写: @interface Class:NSObject{  NSString *_name; } @property(nonamtic, copy) NSString *name; @end@...
  • 成员变量属性的声明与使用方法

    千次阅读 2015-10-25 12:00:30
    什么是成员变量?什么是属性成员变量:就像是一个人的眼睛、鼻子、嘴巴等,为固有等,并且只能类... 专业地说,就是:属性就是成员变量的外部接口。 本质区别:类内使用成员变量,类外使用属性。 例: people.h
  • 属性&成员变量

    千次阅读 2006-04-16 11:53:00
    王咏刚的贵作>是一本很难得的好书,比如看到系统设计篇中的"糟糕的面向对象的设计",作者采用实例的形式列举我们可能会犯得错误,最后给出的基于策略的...在OO里属性(在这里成为成员变量)是对于对象的静态方面的抽象
  • OC 类中的属性成员变量的理解

    千次阅读 2015-09-09 16:29:32
    在iOS开发中,对与类的属性成员变量的理解如下:  1. 属性是供其他类进行调用的,而成员变量仅仅在本类和继承该类的子类中使用。简单言之就是:属性时对外的,成员变量是内部的。  2. 声明一个属性,Xcode ...
  • iOS中属性成员变量的区别

    千次阅读 2015-04-16 16:17:57
    2. 简而言之,对于目前的ios开发,属性成员变量的区别,完全可以不管。 3. 这个是历史原因造成的。苹果更换了默认的编译器(GCC转换为LLVM(low level virtual machine)),增加了一些编译器特性。 4. 以前使用GCC...
  • OC中属性成员变量的区别&联系

    千次阅读 2018-07-26 10:41:26
    成员变量属性 在Objective-C语法中,变量有两种写法,一种是以 @property 形式声明的属性,另一种是定义在大括号里 (@interface :NSObject{} )的成员变量( instance variable )。 @interface MyObject : ...
  • OC中类的属性成员变量的区别

    千次阅读 2017-04-27 14:28:40
    OC中类的属性成员变量的区别
  • 成员变量属性的区别

    千次阅读 2017-11-13 10:50:11
    随着发展apple公司将默认编译器从GCC转换为LLVM(low level virtual machine),从此不再需要为属性声明实例...在iOS5之前,属性的正常写法需要成员变量+ @property + @synthesize 成员变量三个步骤。 还有@dynamic 是工
  • Java成员变量与成员方法

    千次阅读 2019-05-27 10:28:49
    在Java中对象的属性成为成员变量, 有时候很多人也喜欢把成员变量等同于全局变量, 因为成员变量在某一个类中都有效 (成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 495,161
精华内容 198,064
关键字:

属性成员变量