Foundation中NSMutableObject能否用copy
来源:互联网 发布:mac book pro 201515.4 编辑:程序博客网 时间:2024/06/05 19:20
一、如下报错
-[__NSArray0 removeAllObjects]: unrecognized selector sent to instance 0x14e14970
项目中会很多时候遇到这样的报错,原因很简单:是我们用copy修饰符修饰了Foundation中的NSMutableObject对象
@property (nonatomic, copy)NSMutableArray *mutArrayA;@property (nonatomic, strong)NSMutableArray *mutArrayB;NSMutableArray *c = [NSMutableArray array];self.mutArrayA = c;self.mutArrayB = c;NSLog(@"---A--------%@", [self.mutArrayA class]);NSLog(@"---B--------%@", [self.mutArrayB class]);
[5628:1141282] ---A--------__NSArray0[5628:1141282] ---B--------__NSArrayM
从上面的代码可以看出:copy修饰符会把源对象的值copy一份给它所修饰的对象;strong修饰符会直接指向源对象,会和源对象的类型保持一致。
所以在开发中,建议把NSMutableObject用strong修饰
二、创建oc文件时category和Extension选项的作用
1、选择category创建
这是个分类,可以在不修改原来类的基础上,为一个类扩展方法。不能在分类里给对象添加属性。
分类中可以访问原来类中的成员变量,但是只能访问@protect和@public形式的变量。如果想要访问本类中的私有变量,分类和子类一样,只能通过方法来访问。
通过runtime给一个分类添加属性
.h文件#import <UIKit/UIKit.h>@interface UIView (ZMView)@property (nonatomic, strong)UILabel *label;@end
.m文件#import "UIView+ZMView.h"#import <objc/runtime.h>@implementation UIView (ZMView)static NSString *labelKey = @"labelKey";- (UILabel *)label { UILabel *label = objc_getAssociatedObject(self, &labelKey); return label;}- (void)setLabel:(UILabel *)Label { objc_setAssociatedObject(self, &labelKey, Label, OBJC_ASSOCIATION_RETAIN);}@end
2、选择Extension创建
创建的是类扩展,也称为匿名分类,一般用于为类添加属性和方法。
#import <UIKit/UIKit.h>@interface UIView (){ NSString *_str;}@property (nonatomic, strong)UILabel *label;- (void)test;@end
可以在匿名分类里添加实例常量、属性、方法等,在分类里不能添加属性。一般匿名分类里面的东西都是私有化的,在项目开发中我们经常会这样使用,而不是创建文件。
阅读全文
0 0
- Foundation中NSMutableObject能否用copy
- IOS-Foundation-Copy
- Foundation框架 之 NSFileManager 与 copy & mutableCopy
- JAVA中switch能否用在byte上?能否用在long上?能否用在string上?
- 黑马程序员——ios开发基础之OC中Foundation框架(二)、copy以及单例
- 能否用代码修改XIB中UITextField的显示位置?
- 在Chromium for Android中能否用TextureView替代SurfaceView
- Java中 Switch能否用string做参数?
- OC中Foundation
- ios中为什么block用copy属性
- 黑马程序员-----Foundation框架学习之Copy学习
- OC+5-Foundation续©&单例模式singleton
- crontab中能否带入环境变量
- rails3中安装Foundation 4
- Foundation中各种初始化创建
- OC 中 浅 copy 和 深 copy
- oracle 中copy命令
- STL中copy算法
- 水仙花数
- iOS编译过程的原理和应用
- Geoserver Style使用方法概述
- Hibernate三种状态和Session常用的方法
- table限制大小,文字多出部分省略号代替
- Foundation中NSMutableObject能否用copy
- java缓存方法
- mt2523任务优先级规范
- 实战Excel Add-in的三种玩法
- 多线程中锁的使用
- 文章标题
- vsftpd[9183]: warning: can't get client address: Socket operation on non-socket
- BZOJ 3569: DZY Loves Chinese II 线性基 随机化
- freertos V9.0.0之xTaskCreateStatic