首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果NSDictionary是引用类型,那么为什么不将其自身传播到子类?

NSDictionary是Objective-C中的一个类,用于存储键值对的无序集合。它是不可变的,即一旦创建就不能修改其内容。由于NSDictionary是引用类型,它在内存中以指针的形式存在。

虽然NSDictionary是引用类型,但不建议将其自身传播到子类。这是因为NSDictionary是不可变的,子类无法修改其内容。如果将NSDictionary传播到子类,子类将无法添加、删除或修改键值对,这违背了子类的设计初衷。

相反,如果需要在NSDictionary的基础上进行修改,可以使用NSMutableDictionary类。NSMutableDictionary是NSDictionary的可变版本,可以动态地添加、删除和修改键值对。

在云计算领域中,NSDictionary通常用于存储和传递配置信息、请求参数、响应数据等。它的优势在于快速查找和访问键值对,以及提供了丰富的方法来操作和处理数据。

腾讯云提供了云计算相关的产品和服务,其中与NSDictionary类似的是腾讯云的COS(对象存储)服务。COS是一种高可用、高可靠、低成本的云存储服务,可以存储和管理大量的非结构化数据。您可以使用COS存储和访问各种类型的数据,包括文本、图像、音频、视频等。您可以通过腾讯云官网了解更多关于COS的信息:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

编码篇-iOS程序中的内存分配 栈区堆区全局区等相关知识

一个问题:为什么我们在定义NSString时使用Copy而不是 Strong strong和retain同义, weak和assign同义, 为什么要采用这种说法, 似乎ARC出现后为了消除引用计数的观念而采用的做法...至于为什么要用copy, 由于纯NSString只读的, 所以strong和copy的结果一样,都是引用计数+1,相当于 retain,但是当是mutable string时,strong单纯的增加对象的引用计数...,而copy操作执行了一次深拷贝(开出了新的地址,生成了新的对象), NSMutableStringNSString的子类, 因此NSString指针可以持有NSMutableString对象,我们一般希望因为之前的值变化导致属性值也跟着变化...任何的修改在副本上作用,没有作用在原来的变量上。 指针: 压栈的指针变量的副本。 当你对指针解指针操作时,其值指向原来的那个变量,所以对原来变量操作。 引用: 压栈的引用的副本。...(作用和指针一样,只是引用少了解指针的草纸) 从编译的角度来阐述方法中指针、引用之间的区别: 程序在编译时分别将指针和引用添加到符号表上,符号表上记录的变量名及变量所对应地址。

1.5K20

iOS理论基础(一)

b.自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak;当然,也可以使用strong。...a.NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary...如果写 copy ,该类的调用者有可能会忘记或者根本不知道“编译器会自动对 block 进行了 copy 操作”,他们有可能会在调用之前自行拷贝属性值。这种操作多余而低效。...然而设置方法并不保留新值,而是将其“拷贝” (copy)。...这个类 NSString 的子类,表示一种可修改其值的字符串,此时若是拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。

24620

面试iOS 机会在自己手中

答: 编译时NSString的类型;运行时NSData类型的对象 6. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?...2.自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,如自定义 IBOutlet 控件属性一般也使用 weak;当然,也可以使用strong。...用@property声明的 NSString / NSArray / NSDictionary 经常使用 copy 关键字,为什么如果改用strong关键字,可能造成什么问题?...类扩展不仅可以增加方法,还可以增加实例变量(或者属性),只是该实例变量默认@private类型的(使用范围只能在自身类,而不是子类或其他地方),类扩展中声明的方法没被实现,编译器会报警,这是因为类扩展在编译阶段被添加到类中的...在继承中,子类可以使用父类的方法和变量,当子类想对本类或者父类的变量进行初始化,那么需要重写init()方法 。父类也可以访问子类的方法和成员变量 21.

53751

Objective-C Copy

子类必须遵从协议并且实现 copyWithZone: 方法. 除非直接继承自 NSObject.子类在实现 copyWithZone: 必须先发送消息给 super 。...如果一个对象的类采用了NSCopying协议并且实现了它的copyWithZone:方法,那么这个对象就可以被拷贝。...因此,如果对象A被浅拷贝到对象B,则对象B引用对象A引用的同一个实例变量(或属性)。 深拷贝对象比浅拷贝更受欢迎,尤其对于值对象。...YES,如果用这种方法,集合里的每个对象都会被发送一个 copyWithZone: 消息,如果集合里的对象已经适配了NSCopying协议,那么这些对象的引用就会被拷贝到新的集合里。...如果这些对象没有适配NSCopying协议,这种拷贝方式就会报runtime错误。然而,copyWithZone: 产生的一个浅拷贝,这种类型的深拷贝,指对集合对象的进行深拷贝。

46520

KVO 正确使用姿势进阶及底层实现你要知道的KVC、KVO、Delegate、Notification都在这里

,不会增加引用,也不会在对象释放后置空,因此需要自己持有监听对象的强引用,该参数也会在回调函数中回 */ - (void)addObserver:(NSObject *)observer forKeyPath...KVO在注册监听器的时候不会持有监听器对象的引用,也不会像weak那样在监听器对象被销毁时置nil,而是仅仅保留监听器对象的地址,类似于copy修饰符,当监听器对象被销毁而又没有删除监听器时,如果这个时候被监听对象的值发生变化系统会执行监听器的回调函数...context一个id类型的参数,在注册监听器时可以传入该参数,在回调函数中会回该参数,因此,该参数就能完美的解决上述两个问题。那context这个id类型的参数设置为什么值比较合适呢?...可能第一感觉还是设置为NSString类型,但这样仍然可能会产生冲突,苹果推荐的做法创建一个静态变量然后使用该静态变量的地址作为context,通过这样的方法就能够保证context的独一无二。...,其实这里还少了一个栗子,就是不使用context,当我们不使用context仅仅通过keyPath判断,根本无法得知继承的父类是否也在监听同一对象,如果我们继承的第三方的框架,很可能就会产生未知的异常

1.6K80

《Effective Objective-C》干货三部曲(二):规范篇

可以避免循环引用:因为如果两个类在自己的头文件中都引入了对方的头文件,那么就会导致其中一个类无法被正确编译。...如果存在nil值,则会立即抛出异常。如果在不用字面量语法定义数组的情况下,如果数组内部存在nil,则系统会将其设为数组最后一个元素并终止。...而且,对于集合类的对象,更应该仔细考虑是否可以将其设为可变的。 如果在公开部分只能设置其为只读属性,那么就在非公开部分存储一个可变型。...第50条:构建缓存时选用NSCache 而非NSDictionary 如果我们缓存使用得当,那么应用程序的响应速度就会提高。...值得注意的一点如果子类没有实现它,它的超类却实现了,那么就会运行超类的代码:这个情况往往很容易让人忽视。 看一下?

90221

《Effective Objective-C》干货三部曲(二):规范篇

可以避免循环引用:因为如果两个类在自己的头文件中都引入了对方的头文件,那么就会导致其中一个类无法被正确编译。...如果存在nil值,则会立即抛出异常。如果在不用字面量语法定义数组的情况下,如果数组内部存在nil,则系统会将其设为数组最后一个元素并终止。...而且,对于集合类的对象,更应该仔细考虑是否可以将其设为可变的。 如果在公开部分只能设置其为只读属性,那么就在非公开部分存储一个可变型。...第50条:构建缓存时选用NSCache 而非NSDictionary 如果我们缓存使用得当,那么应用程序的响应速度就会提高。...值得注意的一点如果子类没有实现它,它的超类却实现了,那么就会运行超类的代码:这个情况往往很容易让人忽视。 看一下?

80510

iOS - 关于 KVO 的一些总结

C指针),在监听方法中可以接收到这个数据,KVO中的一种值方式 如果一个对象,必须在移除观察之前持有它的强引用,否则在监听方法中访问context就可能导致Crash...② 如果都由 person 来处理,那么在 Person 类的监听方法中又该怎么判断自己的事务还是子类对象的事务呢?   ...context注意点: ① 如果一个对象,必须在移除观察之前持有它的强引用,否则在监听方法中访问context就可能导致Crash; ② 空NULL而不应该nil。...3.6 KVO 新旧值相等时触发   有时候我们可能会有这样的需求,KVO监听的属性值修改前后相等的时候,触发KVO的监听方法,可以结合KVO的自动触发控制和手动触发来实现。   ...如果注册方法中context一个对象,必须在移除观察之前持有它的强引用,否则在监听方法中访问context就可能导致Crash。

2.5K21

iOS_Effective Objective-C 20 编写高质量iOS与OS X代码的52个有效方法

属性的存取方法遵循这种命名方式~ 应该把表示参数类型的名词放在参数前面 如果方法要在当前对象上执行操作,那么就应该包含动词;若执行操作时还需要参数,则应该在动词后面加上一个或多个名词 不要使用str这种简称...如果按“引用数”回溯,那么最终会发现一个“根对象”(root object)。在iOS应用程序中,则是UIApplication对象,程序启动时创建的单例。 ​...如果能,那么程序就不崩溃,可你会觉得奇怪:为什么收到消息的对象不是预想的那个呢?若新对象无法响应选择子,则程序依然会崩溃。 ​...块的强大之处:在声明它的范围里,所有变量都可以为其所捕获。有些变量若需在块内修改,需要加上__block修饰符。 ​ 如果块所捕获的变量对象类型那么就会自动保留它。...及当NSPurgeableData对象所占用内存被系统丢弃时,该对象自身也会从缓存中移除 如果缓存使用得当,那么应用程序的响应速度就能提高。

1K40

面经之《招聘一个靠谱的iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性 自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义...这个类 NSString 的子类,表示一种可修改其值的字符串,此时若是拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。...这个类 NSString 的子类,表示一种可修改其值的字符串,此时若是拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。...一般情况下无须修改默认的实例变量名,但是如果你不喜欢以下划线来命名实例变量,那么可以用这个办法将其改为自己想要的名字。...一般情况下无须修改默认的实例变量名,但是如果你不喜欢以下划线来命名实例变量,那么可以用这个办法将其改为自己想要的名字。

990100

Python面试必刷题系列(4)

Python中的鸭子类型了解吗? 鸭子类型(duck typing),python面向对象的一种多态机制。...打个比方就是,程序现在需要一个像鸭子一样的对象来执行游泳、走、叫的功能,但是这时候第过来的一个鸟,这个鸟具有这些功能,而且执行的效果和鸭子完全一样!!那么,我们就可以认为这个鸟就是一个鸭子类型。...如果函数收到的一个可变对象(比如dict或者list)的引用,就能修改对象的原始值——相当于址。如果函数收到的一个不可变对象(比如数字、字符或者元组)的引用(其实也是对象地址!!!)...所以python的值和比如根据传入参数的类型来选择的: 值的参数类型:数字,字符串,元组(immutable) 址的参数类型:列表,字典(mutable) 你知道哪些魔法函数?用过吗?...异常类 含义 KeyError 试图访问字典里不存在的键 ValueError 传入一个调用者不期望的值,即使值的类型正确的 TypeError 在运算或函数调用时,使用了兼容的类型时引发的异常 IndexError

68520

《Effective Objective-C 》干货三部曲(三):技巧篇

为什么要这么做呢? 笔者认为这么做的原因是为了“弱化”子类的具体类型,让开发者无需关心创建出来的子类具体属于哪个类。(这里觉得还有点什么,但是还没有想到,欢迎补充!)...举个 : - (void)setObject:(id)object forKey:(id)key; 这个方法NSDictionary的设值方法,它的参数只要遵从了协议,就可以作为参数进去...多个对象的保留环: 如果保留环连接了多个对象,而这里其中一个对象被外界引用那么当这个引用被移除后,整个保留环就泄漏了。 ?...第39条:用handler块降低代码分散程度 下载网络数据时,如果使用代理方法,会使得代码分布紧凑,而且如果有多个下载任务的话,还要在回调的代理中判断当前请求的类型。...返回值只能void或者对象类型。 但是如果将方法放在块中,通过GCD来操作就能很好地解决这些问题。

74620

《Effective Objective-C 》干货三部曲(三):技巧篇

为什么要这么做呢笔者认为这么做的原因是为了“弱化”子类的具体类型,让开发者无需关心创建出来的子类具体属于哪个类。(这里觉得还有点什么,但是还没有想到,欢迎补充!)...举个 : - (void)setObject:(id)object forKey:(id)key; 这个方法NSDictionary的设值方法,它的参数只要遵从了协议,就可以作为参数进去...多个对象的保留环: 如果保留环连接了多个对象,而这里其中一个对象被外界引用那么当这个引用被移除后,整个保留环就泄漏了。...第39条:用handler块降低代码分散程度 下载网络数据时,如果使用代理方法,会使得代码分布紧凑,而且如果有多个下载任务的话,还要在回调的代理中判断当前请求的类型。...返回值只能void或者对象类型。 但是如果将方法放在块中,通过GCD来操作就能很好地解决这些问题。

72310

KVO实现原理

监听的属性路径为keyPath支持点语法的嵌套 监听类型为options支持按位或来监听多个事件类型 监听上下文context主要用于在多个监听器对象监听相同keyPath时进行区分 添加监听器只会保留监听器对象的地址...,不会增加引用,也不会在对象释放后置空,因此需要自己持有监听对象的强引用,该参数也会在回调函数中回 */ - (void)addObserver:(NSObject *)observer forKeyPath...的类对象变成了NSKVONotifying_Person,但是我们在调用的时候感觉我们的p1的类对象还是Person,所以,我们可以猜测KVO会在运行时动态创建一个新类,将对象的isa指向新创建的类,新类原类的子类...1、利用RuntimeAPI动态生成一个子类NSKVONotifying_XXX,并且让instance对象的isa指向这个全新的子类NSKVONotifying_XXX 2、当修改对象的属性时,会在子类...,如果记录旧的值,那就没有改变一说了 3、直接修改成员变量会触发KVO吗 不会触发KVO,因为KVO的本质就是监听对象有没有调用被监听属性对应的setter方法,直接修改成员变量,在内存中修改的,

1.1K00

iOS 组件化-路由解耦思想 JLRoutes 实战篇(一)App内控制器跳转

(image-d9aae4-1612352196155)] 来解决 App 内外所有页面之间的跳转逻辑, 经过这几年的学习和使用, 将其记录一边巩固知识, 写出来跟大家一起学习, 加上看到网上分享关于使用组件化...为什么要用路由来实现 VC 跳转 Router 能做的事情很多, 首先我们用它来解决棘手的控制器耦合关系,一种非常有效的解决方案; 在 App 中控制器跳转普遍分为 3 种, 模态跳转Modal(...处理 Router : 也就是注册好 Router 之后, 调用相应 Router 时, 我们在注册时写得回调方法, 这里执行控制器跳转和参的逻辑。...: 传递过来的参数字典的数据结构, 所以我们先检测实例 VC 是否包含这个属性, [vc respondsToSelector:NSSelectorFromString(key)], 如果 VC 有这个属性则直接使用...KVC 的方式来进行赋值, 为了防止在开发时, 传入的字典 Key 与 VC 属性匹配导致一些 Bug, 添加一层 NSAssert,这样能在开发过程中更快找到问题!

1.5K20

前端react面试题合集_2023-03-15

修改由 render() 输出的 React 元素树react 父子值父传子——在调用子组件上绑定,子组件中获取this.props 子父——引用子组件的时候传过去一个方法,子组件通过this.props.methed...展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是数据的状态。容器组件则更关心组件如何运作的。...高阶组件存在的问题静态方法丢失(必须将静态方法做拷贝)refs 属性不能透(如果你向一个由高阶组件创建的组件的元素添加ref引用那么ref指向的最外层容器组件实例的,而不是被包裹的WrappedComponent...但是如果渲染 elements tree 中包含了 function 类型的组件的话,这时候就不能操作组件的子组件了。...在构造函数调用 super 并将 props 作为参数传入的作用在调用 super() 方法之前,子类构造函数无法使用this引用,ES6 子类也是如此。

2.8K50

Objective-C官方文档

如果一个在category里定义的方法名和原始class或者另一个category中定义的方法名一样,那么运行时执行哪一个方法名的方法就不一定了。 为了防止未定义的行为,最佳实践给方法名添加前缀。...objc_setAssociatedObject NSArray和NSDictionary只可以用来收集OC对象,其它对象必须封装在OC对象之内才可以init到上述类型之中。...NSNumber一个类簇。意思当你在运行时创建一个实例时,你会得到一个具体的子类来存储提供的值,就当那个对象是NSNumber的子类就好。...在快速遍历collection时不可以修改值的,即便是mutable的变量。如果你打算add或者remove一个对象,会导致一个运行时异常。...block中的引用值,需要用__block标志。

1.6K30

KVO详解(一)

我们在定义中可以看到,context的类型void *,这是一个C语言中的指针类型,而C语言中的空指针使用NULL来表示的。nil表示的OC中的实例对象的空指针。...通过文档说明我们可以得知,context实际上一个确定更改通知来源的标识,如果将其设置为NULL,那么在响应所观察的变化的时候就需要通过keyPath和keyPath来共同确定变化的来源,如下: -...其实,NSKVONotifying_LVPersonLVPerson的子类那么如何来证明NSKVONotifying_LVPersonLVPerson的子类呢?...如果一个子类复写了父类中的某个方法,那么子类和父类的methodlist中都有该方法,只不过在方法查找过程中先在子类的methodlist中找到了该方法,找到之后就不再往上继续查找了而已。...这说明,移除了观察者之后,会再次调整被观测对象的isa的指向,将其指向最初的原类。 现在在考虑一个问题,既然isa又被指回最初的原类了,那么那个中间子类是否会被销毁呢?答案不会的。

73731
领券