`
rayln
  • 浏览: 434059 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

NSObject 和 反射的使用

阅读更多
//
//  main.m
//  Refect
//
//  Created by Rayln Guan on 9/13/13.
//  Copyright (c) 2013 Rayln Guan. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Person.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Student *stu = [[Student alloc] init];
        
        //判断Student是否是Person的类或者子类
        BOOL is = [stu isKindOfClass:[Person class]];
        NSLog(@"%i", is);
        //判断Student是否是Person类(不包括子类)
        [stu isMemberOfClass:[Person class]];
        //判断某个类是否实现了某个协议
        //[stu conformsToProtocol:<#(Protocol *)#>]
        
        //判断某个类是否拥有参数提供的方法
        [stu respondsToSelector:@selector(select)];
        
        //间接调用方法
        [stu performSelector:@selector(test1)];
        [stu performSelector:@selector(test2:) withObject:@"abc"];
        //延迟调用
        [stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];
        
#pragma mark - reflect
        //类名反射
        NSString *str = @"Person";
        Class class = NSClassFromString(str);
        Person *person = [[class alloc] init];
        
        
        //Class变成字符串
        NSString *name = NSStringFromClass([Person class]);
        
        //方法反射
        NSString *method = @"test1";
        SEL selector = NSSelectorFromString(method);
        [person performSelector:selector];
        
        //将sel转化为字符串
        NSString *method1 = NSStringFromSelector(selector);
        
        [person release];
        
    }
    return 0;
}



Person和 Student只是定义了test1和test2方法而已
分享到:
评论

相关推荐

    NSObject+RunTimeUtilit

    通过`-[NSObject valueForKey:]`和`-[NSObject setValue:forKey:]`方法,我们可以读写私有属性,但需要注意的是,这可能会绕过正常的setter逻辑,所以应谨慎使用。 4. **方法的交换(Method Swizzling)**:Runtime...

    JsonObjectCreator:使用反射从 Json 字符串创建目标 C 对象

    Json 对象创建器使用反射从 Json 字符串创建目标 C 对象用法@interface UserObject : NSObject@property (strong, nonatomic) NSString* text;@property (strong, nonatomic) NSString* username;@property (strong,...

    ios对象dictionary互转库

    在提供的两个文件——`NSObject+Ext.h`和`NSObject+Ext.m`中,我们可以看到`NSObject`的分类(Category)扩展。在Objective-C中,分类可以给现有的类添加新的方法,而不影响原有的代码结构。在这个库中,`NSObject+...

    oc中的通知,kvc,kvo

    - **性能优化**:KVC通常用于数据绑定、序列化和反射等场景,但在性能敏感的代码中应谨慎使用,因为它涉及到额外的运行时查找。 3. **Key-Value Observing (KVO)** - **定义**:KVO是一种观察对象属性变化的技术...

    IOS应用源码——ReflectionTest.rar

    在Objective-C中,反射主要通过Foundation框架的NSClassFromString、-[NSObject performSelector:]等方法实现,使得我们可以在运行时动态地获取类信息、调用方法、访问属性等。 二、Objective-C的元类(Meta-class...

    IOS开发系列—Objective-C之Foundation框架 - KenshinCui - 博客园.pdf

    Foundation框架中的`NSObject`类提供了反射的功能,可以通过反射来动态调用方法或获取对象的信息。 #### 拷贝 在处理数据时,经常需要复制对象。Foundation框架提供了两种拷贝方式:浅拷贝和深拷贝。浅拷贝仅复制...

    KVC的原理和使用

    **KVC(Key-Value Coding)是iOS开发中的一个重要概念,它是Apple...总的来说,KVC在很多场景下都提供了极大的灵活性,特别是在绑定、数据模型和反射等方面。理解并熟练掌握KVC的使用,对于iOS开发者来说是非常重要的。

    ios中,sqlite数据库数据与实体自动绑定

    例如,我们可以获取属性的名字(通过`NSSelectorFromString`)和类型,然后使用`setValue:forKey:`或`setValue:forKeyPath:`方法设置值。 ```objc - (NSArray *)fetchUsersFromDatabase { NSMutableArray *users =...

    ios-Json 转 模型一行代码 (优化了上一个版本).zip

    这通常涉及KVC(Key-Value Coding)和反射机制。KVC允许我们通过键值来访问对象的属性,而反射则让我们可以在运行时检查类的信息,如属性列表,进而实现动态的JSON解析。 优化可能包括以下方面: 1. 性能提升:通过...

    swift-使用私有API将触摸栏按钮添加到控制条

    通常,这涉及到反射(Reflection)和动态类型(Dynamic Typing)的使用,以便在运行时访问和调用私有对象。Swift中,我们可以使用`Objective-C`的桥接来实现这一点,因为Objective-C允许更多的底层操作。 1. **使用...

    Learn Objective-C Samples.rar

    这种动态性使得Objective-C非常适合进行反射和元编程。 3. **协议(Protocols)**:Objective-C的协议类似于Java和C#的接口,定义了一组可选的方法声明。对象可以遵循一个或多个协议,以实现特定的功能或交互。在...

    RuntimeDemo

    Runtime支持KVC的实现,如`-[NSObject valueForKey:]`和`-[NSObject setValue:forKey:]`。 8. **协议(Protocol)** 通过Runtime,我们可以检查对象是否遵循某个协议,`conformsToProtocol:`函数就是为此设计的。...

    kvo-kvc介绍

    - 性能:相比于直接访问属性,KVC操作通常较慢,因为它涉及反射和消息发送。 在实际开发中,KVO和KVC通常结合使用,例如在MVVM架构中,模型(Model)的属性变化通过KVO传递给视图模型(ViewModel),然后ViewModel...

    @objc小结

    正确理解和使用`@objc`可以帮助开发者更好地设计跨平台的iOS和macOS应用。在项目中,应当谨慎使用`@objc`,避免无谓的性能损失,同时确保代码的兼容性和可维护性。 TestObjc这个压缩包可能包含了相关的示例代码或者...

    KVCKVO学习

    使用KVC的基本语法是通过`valueForKey:`和`setValue:forKey:`方法来获取和设置属性值。例如,对于一个名为`person`的对象,如果它有一个`name`属性,可以这样操作: ```objc NSString *name = [person valueForKey:...

    解锁Objective-C的KVC:深入Key-Value Coding的奥妙

    例如,如果有一个`Person`类包含`name`和`age`属性,可以使用KVC来访问这些属性。 **示例代码**: ```objc @interface Person : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, ...

    RuntimeCoder

    在iOS和Mac开发中,Objective-C的Runtime是一个强大的工具,它允许我们在运行时...但在实际应用中,我们需要根据项目需求和具体场景来决定是否使用此类工具,因为过度依赖Runtime可能会增加代码的复杂性和不可预测性。

    swift-在Objective-C下获取app的所有的类的列表

    `来获取类,再结合Swift的泛型和反射特性进行操作。 `ReflectionDemo-master`这个压缩包可能包含了一个示例项目,演示了如何在Objective-C或Swift中实现这个功能。通过查看该项目的源代码,你可以更深入地了解这一...

    10道常用的Swift面试题(附答案)

    - **Objective-C**: 仅支持**动态派发**(消息派发),这使得Objective-C在处理动态类型和反射时非常强大。 #### 6. 函数式编程 - **Swift**: 支持**函数式编程特性**,包括高阶函数等,这使得Swift在处理数据流和...

    objective-c运行时编程指南

    - iPhone应用程序和macOS 10.5及之后版本中的64位程序均使用Objective-C运行时系统的现行版本。 - 对于macOS中的32位程序,则使用早期版本。 #### 与运行时系统的交互 Objective-C程序可以通过以下几种方式与...

Global site tag (gtag.js) - Google Analytics