NSobject的基本方法使用

除了NSobject以外,所有的类都有父类。默认的父类一般是NSobject。

我们建立一个名为person,继承NSobject的子类,来方便下面的讨论。

//初始对象

person *niang=[[person alloc] init];

//1 这个方法是判断有没有这个实例方法,返回值是bool类型。有,返回1,没有,返回0。只能判断实例方法。

BOOL a=[person instancesRespondToSelector:@selector(print)];

NSLog(@"%d",a);

//2 功能和上一个函数一样,这是这是一个实例方法。

BOOL a1=[niang respondsToSelector:@selector(print)];

NSLog(@"%d",a1);

//3 判断有没有遵守这个协议。

Protocol *NSCoding;

BOOL b=[person conformsToProtocol:NSCoding];

NSLog(@"%d",b);

//4 nsobject的一个类方法,会得到一个指向这个实例方法的一个函数指针

IMP nprint=[person instanceMethodForSelector:@selector(print)];

nprint();

//5 nsobject的一个实例方法,会得到一个指向这个实例方法的一个函数指针

IMP nprint1=[niang methodForSelector:@selector(print)];

nprint1();

//6 运行时替换person中print方法的实现,用replace这个方法实现(前提是你把这个方法实现了),用个方法时注意这四个参数的类型。

IMP replace=[niang methodForSelector:@selector(replace)];

class_replaceMethod([person class], @selector(print),replace, NULL);

[niang print];

//7 这个方法的作用:给person这个类添加一个nothing的方法,方法的实现是replace

class_addMethod([person class], @selector(nothing),replace, NULL);

[niang performSelector:@selector(nothing)];

//上面两个方法说明了 oc是一门动态语言。

//8  我们调用实例方法时“[]”就是下面的内容

//   objc_msgSend(niang,@selector(print));

我们在创建一个 名为 son 继承于person的子类。

son *son1=[[son alloc] init];

9  如果我们在子类中实现了与父类同名的方法,子类的对象调用该方法时,是调用子类自己的那个方法。

//10 本质上,用%@打印对象的时候,打印的是该对象调用的description方法所返回的字符串。

NSLog(@"%@******%@",[son1 description],son1);

//11 该方法判断 son1是不是person类的对象。这里返回的是1(子类的对象都是属于父类的)

BOOL c=[son1 isKindOfClass:[person class]];

NSLog(@"%d",c);

//12 该方法功能与上面一样,但是是严格匹配类型。在这个方法中,子类的对象不是属于父类的了。所以这里返回的时0

BOOL c1=[son1 isMemberOfClass:[person class]];

NSLog(@"%d",c1);

NSobject的基本方法使用,布布扣,bubuko.com

时间: 2024-08-03 20:32:08

NSobject的基本方法使用的相关文章

NSObject的hash方法

说明 本示例仅仅演示一个对象什么时候执行hash方法. 细节 1. 必要的Model类,重载了hash方法用以反映Hash方法是否被调用了 2. 测试 // // ViewController.m // Hash // // Created by YouXianMing on 16/4/15. // Copyright © 2016年 YouXianMing. All rights reserved. // #import "ViewController.h" #import &quo

NSObject的常见方法

代码: #import <Foundation/Foundation.h> /****************************** * Learning协议 ******************************/ @protocol Learning - (void)learn; @end /****************************** * Person类 ******************************/ @interface Person : N

Objective-C Runtime 运行时之三:方法与消息

基础数据类型 SEL SEL又叫选择器,是表示一个方法的selector的指针,其定义如下: typedef struct objc_selector *SEL; objc_selector结构体的详细定义没有在<objc/runtime.h>头文件中找到.方法的selector用于表示运行时方法的名字.Objective-C在编译时,会依据每一个方法的名字.参数序列,生成一个唯一的整型标识(Int类型的地址),这个标识就是SEL.如下代码所示: 1 2 SEL sel1 = @selecto

iOS中的导航条(UISegmentedControl)的基本使用(界面中传值的3中方法)

Appdelegate中 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; //1.创建单视图控制器对象, FirstViewControll

oc消息发送机制之performSelector方法的扩充

本文摘自别的博客 各种语言都有些传递函数的方法:C语言中可以使用函数指针,C++中有函数引用.仿函数和lambda,Objective-C里也有选择器(selector)和block. 不过由于iOS SDK中的大部分API都是selector的方式,所以本文就重点讲述selector了.Objective-C和我接触过的其他面向对象的语言不同,它强调消息传递,而非方法调用.因此你可以对一个对象传递任何消息,而不需要在编译期声名这些消息的处理方法. 很显然,既然编译期并不能确定方法的地址,那么运

Runtime之方法

前两篇介绍了类与对象.成员变量&属性&关联对象的相关知识,本篇我们将开始讲解Runtime中最有意思的一部分内容:消息处理机制.我们从一个示例开始. 在OC中,我们使用下面这种方式来调用方法: GofTest *test = [[GofTest alloc] init];[test eat]; 对上面的方法调用,我们用Runtime的消息发送机制改造一下: id test = objc_msgSend(objc_getClass("GofTest"), sel_regi

[ObjectC]Runtime运行时之三:方法与消息

这一章,我们就要开始讨论Runtime中最有意思的一部分:消息处理机制.我们将详细讨论消息的发送及消息的转发. 基础数据类型 SEL SEL又叫选择器,是表示一个方法的selector的指针,其定义如下: typedef struct objc_selector *SEL; objc_selector结构体的详细定义没有在<objc/runtime.h>头文件中找到.方法的selector用于表示运行时方法的名字.Objective-C在编译时,会依据每一个方法的名字.参数序列,生成一个唯一的

1218.1——OC中的常见关键字及一些基本方法

OC常见的关键字介绍: @ 看到这个关键字,我们就应该想到,这是Object-C对C语言的扩展,例如@interface XXX. @interface 声明类 @implementation 实现类 @protocol 声明协议 @optional 与@protocol配合使用,说明协议中的某个或者某几个方法可以不实现 @required 与@protocol配合使用,说明协议中的某个方法或者某几个方法必须实现 @end 与@interface ,@implementation,@protoc

多线程&amp;NSObject&amp;NSThread&amp;NSOperation&amp;GCD

1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 2.NSOperation/NSOperationQueue 面向对象的线程技术 3.GCD —— Grand Central Dispatch(派发) 是基于C语言的框架,可以充分利用多核,是苹果推荐使用的多线程技术 以上这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的.但是就目