怎么为iOS只读属性初始化

时间:2021-02-24 19:32:27
小弟在.h文件定义了一个readonly属性,怎么在初始化的时候赋值呀?
不能把readonly属性改为可读写。

5 个解决方案

#1


问题描述:.h文件中定义了一个readonly属性,但是并未声明构造器实例方法,只有一个类方法
又因为类方法不能直接为readonly属性赋值,所以问了这个问题。

实际我忽视了几个简单问题:1.类方法不可以使用自身属性和实例方法,但是可以使用self。   2.readonly属性可以在构造器函数中初始化,(也理解为什么时候需要readonly属性了,只希望初始化一次,或者不希望随便更改,其实在.m文件的实例方法中可以更改,只是不能在外面通过对象的属性直接更改而已 )。

代码参考:
//解决问题,怎么通过类方法初始化一个readonly属性?
//头文件中并未声明这个方法,只能在里面使用。
//这个方法的作用是为了给下面一个类方法的使用。(因为在类方法中无法使用属性和实例方法,但是可以使用self)
- (instancetype)initWithButtonType:(UIButtonType)buttonType {
    self = [super init];
    _buttonType = buttonType;
    return self;
   }

+ (instancetype)buttonWithType:(UIButtonType)buttonType{
    //这里相当于生成一个对象
    return [[self alloc] initWithButtonType:buttonType];
}

#2


另外这篇博客([ http://www.jianshu.com/p/1ffa6414008e)有解决修改只读属性的办法,但是我试了不行,好像是ARC不允许怎么滴。

#3


那么第二个问题来了?

如果是继承父类含有readonly属性,怎么修改了??????

#4


kvc就可以改呀

#5


本帖最后由 disburden 于 2017-03-13 15:02:01 编辑
楼上的,你那方法应该破坏了开闭原则了吧,也不是楼主设置只读属性的本意
你既然设置为只读显然不想要赋值,初始的话的你可以在类的内部定义一个常量(如果会变化就用变量),初始化的时候给这个常量赋值,然后通过get方法返会给你的这个属性.

#1


问题描述:.h文件中定义了一个readonly属性,但是并未声明构造器实例方法,只有一个类方法
又因为类方法不能直接为readonly属性赋值,所以问了这个问题。

实际我忽视了几个简单问题:1.类方法不可以使用自身属性和实例方法,但是可以使用self。   2.readonly属性可以在构造器函数中初始化,(也理解为什么时候需要readonly属性了,只希望初始化一次,或者不希望随便更改,其实在.m文件的实例方法中可以更改,只是不能在外面通过对象的属性直接更改而已 )。

代码参考:
//解决问题,怎么通过类方法初始化一个readonly属性?
//头文件中并未声明这个方法,只能在里面使用。
//这个方法的作用是为了给下面一个类方法的使用。(因为在类方法中无法使用属性和实例方法,但是可以使用self)
- (instancetype)initWithButtonType:(UIButtonType)buttonType {
    self = [super init];
    _buttonType = buttonType;
    return self;
   }

+ (instancetype)buttonWithType:(UIButtonType)buttonType{
    //这里相当于生成一个对象
    return [[self alloc] initWithButtonType:buttonType];
}

#2


另外这篇博客([ http://www.jianshu.com/p/1ffa6414008e)有解决修改只读属性的办法,但是我试了不行,好像是ARC不允许怎么滴。

#3


那么第二个问题来了?

如果是继承父类含有readonly属性,怎么修改了??????

#4


kvc就可以改呀

#5


本帖最后由 disburden 于 2017-03-13 15:02:01 编辑
楼上的,你那方法应该破坏了开闭原则了吧,也不是楼主设置只读属性的本意
你既然设置为只读显然不想要赋值,初始的话的你可以在类的内部定义一个常量(如果会变化就用变量),初始化的时候给这个常量赋值,然后通过get方法返会给你的这个属性.