zoukankan      html  css  js  c++  java
  • NSObject和反射

    main:

     1 //
     2 //  main.m
     3 //  NSObject
     4 //
     5 //  Created by dingxiaowei on 13-5-19.
     6 //  Copyright (c) 2013年 dingxiaowei. All rights reserved.
     7 //
     8 
     9 #import <Foundation/Foundation.h>
    10 #import "Student.h"
    11 #import "Person.h" //由于Student继承自Person,所以这儿可以不需要导入Person.h,但import导入的时候,会先进行判断,然后在导入头文件,不会出现重复导入的状况
    12 
    13 void NSObjectCreate(){
    14     //判断是否是某一个类
    15     id *stu=[[[Student alloc] init] autorelease];
    16     if([stu isKindOfClass:[Person class]]){ //判断是否是Student类或者是否继承自Person类
    17         NSLog(@"stu是Student类或者是继承自Person类");
    18     }
    19     else
    20         NSLog(@"不是");
    21 
    22     //如果用[stu isMemberOfClass:]这种方法只能判断是否是属于这个类,如果是子类则返回no,这个判断范围没有上面那种方法大
    23     BOOL * result=[stu isMemberOfClass:[Person class]];
    24     NSLog(@"是否是这个类:%i",result);
    25 
    26 
    27     Student *student=[[[Student alloc] init] autorelease];
    28     //直接调用方法
    29     [student test];
    30     //间接调用方法
    31     [student performSelector:@selector(test)]; //调用无参方法
    32     //如果调用有参方法要特别注意,调用的这个函数的参数类型不能是基本数据类型,就算我们将要传的参数封装成基本OC对象的NSNumber,但OC不支持自动解包,所以要确保调用的方法它的参数是OC对象
    33     [student performSelector:@selector(test2:) withObject:@"3"];
    34     //调用带有两个参数的方法,但是注意,没有调用两个参数及以上的方法
    35     //[student performSelector:@selector(test2) withObject:@"1" withObject:@"2"];
    36 
    37     //使用定时器,延迟两秒调用test2
    38     [student performSelector:@selector(test2:) withObject:@"1" afterDelay:2];//延迟2秒钟带调用调用这个方法,注意:由于主函数都结束了,所以看不到延迟调用这个方法的执行
    39 }
    40 #pragma mark - 反射
    41 void reflect(){
    42     //类名的反射(字符串变成类名)
    43     NSString *str=@"Person";
    44     Class class=NSClassFromString(str);
    45     Person *person=[[[class alloc] init] autorelease];
    46     person.name=@"dingxiaowei";
    47     NSLog(@"%@",person);
    48 
    49 
    50     //类名变成字符串
    51     NSString * strClass= NSStringFromClass([Person class]);
    52     NSLog(@"%@",strClass);
    53 
    54     //方法的反射
    55     NSString *method=@"test";
    56     SEL selector=NSSelectorFromString(method);
    57     [person performSelector:selector];
    58     //selector变成字符串
    59     str=NSStringFromSelector(selector);
    60     NSLog(@"%@",str);
    61     
    62 }
    63 
    64 int main(int argc, const char * argv[])
    65 {
    66 
    67     @autoreleasepool {
    68         //NSObjectCreate();
    69         reflect();
    70     }
    71     return 0;
    72 }
    View Code

    Person:

     1 //
     2 //  Person.m
     3 //  NSObject
     4 //
     5 //  Created by dingxiaowei on 13-5-19.
     6 //  Copyright (c) 2013年 dingxiaowei. All rights reserved.
     7 //
     8 
     9 #import "Person.h"
    10 
    11 @implementation Person
    12 
    13 +(id)personWithName:(NSString *)name{
    14     Person *person=[[[Person alloc] init] autorelease];
    15     person.name=name;
    16     return person;
    17 }
    18 
    19 -(void)test{
    20     NSLog(@"调用了Person的test方法");
    21 }
    22 
    23 -(NSString *)description{
    24     return self.name;
    25 }
    26 
    27 -(id)alloc{
    28     [_name release];
    29     [super alloc];
    30 }
    31 @end
    View Code

    Student:

     1 //
     2 //  Student.m
     3 //  NSObject
     4 //
     5 //  Created by dingxiaowei on 13-5-19.
     6 //  Copyright (c) 2013年 dingxiaowei. All rights reserved.
     7 //
     8 
     9 #import "Student.h"
    10 
    11 @implementation Student
    12 -(void)test{
    13     NSLog(@"调用了test方法");
    14 }
    15 -(void)test2:(NSString *)a{
    16     NSLog(@"调用了test2方法,参数%@",a);
    17 }
    18 //-(void)test3:(NSString *)a withPar:(NSString *)b{
    19 //    NSLog(@"带有两个参数的方法,参数1%@,参数2%@",a,b);
    20 //}
    21 @end
    View Code
  • 相关阅读:
    为BlueLake主题增加自定义icon图标
    Kettle自定义jar包供javascript使用
    【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中
    用心整理 | Spring AOP 干货文章,图文并茂,附带 AOP 示例 ~
    iOS开发——Web基础URLConnection请求
    iOS开篇——UI之UITableView 自定义Cell
    iOS开篇——UI之UITableView的搜索
    iOS开篇——UI之UITableView
    iOS开篇——UI之UIScrollView
    iOS开篇——UI之UIWebView
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3086988.html
Copyright © 2011-2022 走看看