NSObject,反射,copy笔记

一,NSObject的基本使用

NSObject的常用方法

 

 1.判断是够味aClass或者aClass的子类的实例

 - (BOOL)isKindOfClass:(Class)aClass

 

 2.判断是否为aClass的实例(不包括aClass的子类)

 - (BOOL)isMenberOfClass:(Class)aClass

 

 3.判断对象是否实现了aProtocol协议

 - (BOOL)conformaToProtocol:(Protocol)aProtocol

 

 4.判断这个类的对象是否拥有参数提供的方法

 + (BOOL)instancesRespondToSelector:(SEL)aSelector

 

 5.判断对象是否拥有参数提供的方法:无传入参数时test后面不用加冒号,有参数则加冒号,不能传入一般数据类型 只能传入面向OC对象的

 - (BOOL)respondsToSelector:(SEL)aSelector

 

 6.延迟调用参数提供的方法,方法所需从参数用withObject传入

 - (void)performSelector:(SEL)aSelector withObject:(id)andArgument afterDelay:NSTimeInterval)delay


二,反射
反射定义 :根据一个字符串(方法)可创建一个对象(方法),根据字符串来使用另一个对象

Class的反射

 1.通过类名的字符串形式实例化对象

 Class class = NSClassFromString(@"Student");

 Student *stu = [[class alloc] init];

 

 2.将类名变成字符串

 Class class = [Student class];

 NSString *className = NSStringFromClass(class);

 

 SEL的反射

 1.通过方法的字符串形式实例化方法

 SEL selector = NSSelectorFromString(@"setName:");

 [stu performSelector:selector withObject:@"Mike"];

 

 2.将方法变成字符串

 NSStringFromSelector(@selector(setName))




三,copy
1.copy的根本目的:改变副本的时候,不会改变源对象

2.copy的分类:1>深拷贝:内容拷贝,会产生新的对象,新对象计算器+1,源对象计算器不变,如 MutableCopy
        2>浅拷贝:指针拷贝,不会产生新的对象,copy直接返回源对象本身如copy
深拷贝与浅拷贝取决于源对象本身,如源对象本身就是不可变则是浅拷贝
3.copy的使用场合:改变外面对象,不影响内部对象的时候用copy策略
    
4.copy的特点:1>copy代表set 方法时会release旧对象,copy新对象
        2>copy会修改外面的变量,并不影响内部的成员变量,retain则会改变内部成员变量
        3>建议:字符串String一般用copy策略,其他对象一般用retain,根据需求来选择
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
struct VideoPicker: UIViewControllerRepresentable { @Environment(.presentationMode) private var presentationMode let sourceType: UIImagePickerController.SourceType // let onImagePicked: (UIImage) -> Void let onURLPicked: (URL) -> Void final class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @Binding private var presentationMode: PresentationMode private let sourceType: UIImagePickerController.SourceType private let onURLPicked: (URL) -> Void init(presentationMode: Binding<PresentationMode>, sourceType: UIImagePickerController.SourceType, onURLPicked: @escaping (URL) -> Void) { presentationMode = presentationMode self.sourceType = sourceType self.onURLPicked = onURLPicked } func imagePickerController( picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // let uiImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage // onImagePicked(uiImage) if let url = info[.mediaURL] as? URL{ onURLPicked(url) } presentationMode.dismiss() } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { presentationMode.dismiss() } } func makeCoordinator() -> Coordinator { return Coordinator(presentationMode: presentationMode, sourceType: sourceType, onURLPicked: onURLPicked) } func makeUIViewController(context: UIViewControllerRepresentableContext<VideoPicker>) -> UIImagePickerController { let picker = UIImagePickerController() picker.sourceType = sourceType picker.delegate = context.coordinator picker.mediaTypes = ["public.movie"] return picker } func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<VideoPicker>) { } }这段代码获取的url中绝对路径不准确
最新发布
05-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值