首页 > 其他分享 >关于Objective-C头文件中的property为readonly,外部还能set成功

关于Objective-C头文件中的property为readonly,外部还能set成功

时间:2023-08-06 16:46:13浏览次数:39  
标签:set 头文件 name property readonly test FCTest

起初是同事和我说,property为readonly,外部还能set成功。实在没想明白。

常规的写法, .m中可以直接set成功,而外部创建的FCTest对象,无法set成功(见FCObject)。

FCTest.h

@interface FCTest : NSObject

@property (nonatomic, copy, readonly) NSString *name;

@end

FCTest.m

@interface FCTest ()
@property (nonatomic, copy) NSString *name;
@end
@implementation FCTest
+ (void)test {     FCTest *test = [[FCTest alloc] init];     test.name = @"hahaha"; // 不会编译失败 }
@end

FCObject.m

+ (void)test {
    FCTest *test = [[FCTest alloc] init];
    test.name = @"hahaha"; // 编译报错
}

那是什么原因导致set成功了呢?

我们先排除kvc,其次.m,甚至分类都没有调用set方法。那就只剩下协议了。

我们先试下在协议添加readonly的property的set方法。

@protocol FCTestProtocol <NSObject>

- (void)setName:(NSString *)name;

@end

@interface FCTest : NSObject <FCTestProtocol>

加载协议之后,FCObject中编译通过了。

最后查了工程的代码,确实是有一个协议中有set方法。

oc和swift混编时,在swift中调用FCTest,可以很明显的看出来问题。

let test = FCTest()
test.name = "hahaha" // 编译报错
test.setName("hahaha")

可以看到,name不能直接等于,只能通过set方法。

总结:不知道property为readonly的情况,为什么在协议中还添加了set方法,但总算找到了原因。

标签:set,头文件,name,property,readonly,test,FCTest
From: https://www.cnblogs.com/fwzhou/p/17609538.html

相关文章

  • k8s 学习笔记之 Pod 控制器——StatefulSet
    StatefulSetStatefulSet是用来管理有状态应用的工作负载API对象。StatefulSet用来管理某Pod集合的部署和扩缩,并为这些Pod提供持久存储和持久标识符。和Deployment类似,StatefulSet管理基于相同容器规约的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个......
  • k8s 学习笔记之 Pod 控制器——DaemonSet(DS)
    DaemonSet(DS)DaemonSet类型的控制器可以保证在集群中的每一台(或指定)节点上都运行一个副本。一般适用于日志收集、节点监控等场景。也就是说,如果一个Pod提供的功能是节点级别的(每个节点都需要且只需要一个),那么这类Pod就适合使用DaemonSet类型的控制器创建。DaemonSet控......
  • MeeGo handset 1.1开发环境[4]:在SDK上实现Hello World
    我们会followwiki的guide,通过QTCreator在模拟器上运行helloworld程序,然后我们会对模拟器作进一步的探讨。wiki上的参考:http://wiki.meego.com/Getting_started_with_the_MeeGo_SDK_for_Linuxhttp://wiki.meego.com/SDK/Docs/1.1/Creating_Hello_World一、通过QTCreator来......
  • k8s 学习笔记之 Pod 控制器——ReplicaSet(RS)
    Pod控制器介绍Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建什么是Pod控制器Pod控制......
  • Apache Superset 1.2.0教程 (三)—— 图表功能详解
    通过之前章节的学习,我们已经成功地安装了superset,并且连接mysql数据库,可视化了王者英雄的数据。使用的是最简单Table类型的图表,但是superset还支持非常多的图表类型。本文我们将对各种图表类型进行逐一的演示,文章较长,建议收藏后阅读。图表分类Superset提供了大量的图表来帮助我们进......
  • 离线安装Superset 0.37(截图详细版)
    上文提到了Superset0.37的在线安装方式,只需要更新pip,然后pipinstall就可以了。但是在生产环境中,特别是内网环境中,很多时候是没有外网的,这时候就需要采取离线安装的方式。本文将详细介绍在Linux系统中离线安装Superset的全过程,并整理了安装过程中遇到的错误。下载相关安装包注:本文......
  • Windows系统快速安装Superset 0.37
    Windows系统安装Superset0.37Superset 是一款由Airbnb开源的“现代化的企业级BI(商业智能)Web应用程序”,其通过创建和分享dashboard,为数据分析提供了轻量级的数据查询和可视化方案。windows系统下安装superset大同小异,本文通过Win10系统演示整个安装过程。win10安装python3.......
  • 阿里发布开源大数据热力报告2022——Flink,Superset,Datahub上榜
        近日阿里发布了《开源大数据热力报告2022》报告,分析近年来大数据项目的发展趋势。    在这当中听到了太多熟悉的名字,Kibana,Grafana,ClickHouse,Spark,Airflow,Flink,Superset,Kafka,Metabase,DolphinScheduler,Iceberg,Hudi,Datahub,SeaTunnel等等。    有很多是我已经研究写了......
  • 3G mindset
    3Gmindset①Globalisyourvantagepoint.It’sabouthowfaryousee,reachandgotounderstandandaddresseverydaychallengesandissues.It’saboutthinkingbig,makingconnectionsandbeingopen.Keyqualities:adaptability,flexibility,relationshi......
  • 使用Locust进行接口性能测试:Locust and TaskSet类详细分析(二)
    “Locust是一款开源的Python性能测试工具,它可以模拟大量并发用户对网站或者其他接口进行压力测试”一、Locust类详细说明在Locust中,Locust类是整个负载测试工具的核心。它用于创建并发用户场景,模拟用户行为。示例:fromlocustimportLocust,TaskSet,task#每一个Locust类,......