【瓶口溯源码】【城市门户 源码】【valgrind源码下载】ismemberofclass源码

1.iOS中isKindOfClass和isMemberOfClass的区别
2.关于DROOLS规则引擎的图书那里有卖的,急需啊!
3.iOS开发中isKindOfClass和isMemberOfClass的区别
4.ios performselector 和 respondstoselector的区别
5.isKindOfClass和isMemberOfClass的区别

ismemberofclass源码

iOS中isKindOfClass和isMemberOfClass的区别

       å¯¹è±¡åœ¨è¿è¡Œæ—¶èŽ·å–其类型的能力称为内省。内省可以有多种方法实现。判断对象类型-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例 UIView *view = [[UIView alloc]init]if ([view isKindOfClass:[UIView class]]){ //view是UIView类或者是UIView的子类}

关于DROOLS规则引擎的图书那里有卖的,急需啊!

       InfoQ发布了一个关于规则引擎的介绍Real-World Rule Engines,原文 /articles/Rule-Engines

       ONJava上也有两篇文章:

       Give Your Business Logic a Framework with Drools /lpt/a/

       Using Drools in Your Enterprise Java Application /lpt/a/

       下面总结一下其中的精华:

       大多数web和企业Java应用可以分成三个部分:一个和用户交互的前台, 一个和后台系统,例如数据库交互的服务层,以及他们中间的业务逻辑。 现在使用框架构建前台和后台系统已经成为普遍共识(例如,瓶口溯源码 Struts, Cocoon, Spring, Hibernate, JDO, 和 Entity Beans), 但却没有一个标准的方法来构建业务逻辑。一些框架,城市门户 源码例如 EJB 和 Spring 只在一个高层实现业务逻辑,但对于我们组织逻辑代码没有任何帮助,所以,为什么没有一个框架来替换冗繁,易错的if...then语句呢,这个框架应该和其它前台或后台框架一样,易于配置,valgrind源码下载具有可读性和重用性。下面我们将介绍Drools 规则引擎,这个来解决我们问题的框架。

       下面是彗星模块源码一个典型的Java业务逻辑的代码

       if ((user.isMemberOf(AdministratorGroup)

       && user.isMemberOf(teleworkerGroup))

       || user.isSuperUser(){

       // more checks for specific cases

       if((expenseRequest.code().equals("B")

       ||(expenseRequest.code().equals("A")

       &&(totalExpenses<)

       &&(bossSignOff> totalExpenses))

       &&(deptBudget.notExceeded)) {

       //issue payments

       } else if {

       //check lots of other conditions

       }

       } else {

       // even more business logic

       }

       这是大多数程序员写业务逻辑的方法,但是有以下的问题:

       如果用户有另一个选项,例如("C") ,那么需要修改上面的代码,当代码很长的定位 网页源码时候,修改代码是难于维护的

       我们如何保证代码的正确性,这个代码只有程序员能够看到,真正的使用者,业务人员无法看到这个代码

       很多应用程序有相同的业务逻辑,如果某个业务改变了,如何保证其他业务逻辑的一致性

       业务逻辑能否不合java语言绑定?

       业务逻辑能否用其他的脚本语言。

       Java下的规则引擎标准就是JSR,它的实现主要有Jess Jena Drools

       Drools中,一个典型的业务逻辑的配置,如下

       <?xml version="1.0"?>

       <rule-set name="BusinessRulesSample"

       xmlns="mendPurchase());

       }

       </java:functions>

       <rule-set>

       <!-- Ensure stock price is not too high-->

       <rule name="Stock Price Low Enough">

       <!-- Params to pass to business rule -->

       <parameter identifier="stockOffer">

       <class>StockOffer</class>

       </parameter>

       <!-- Conditions or 'Left Hand Side'

       (LHS) that must be met for

       business rule to fire -->

       <!-- note markup -->

       <java:condition>

       stockOffer.getRecommendPurchase() == null

       </java:condition>

       <java:condition>

       stockOffer.getStockPrice() <

       </java:condition>

       <!-- What happens when the business

       rule is activated -->

       <java:consequence>

       stockOffer.setRecommendPurchase(

       StockOffer.YES);

       printStock(stockOffer);

       </java:consequence>

       </rule>

       </rule-set>

       一条规则就是rule-set中的rule,如果有很多规则,就要写很多的rule。

       上面规则的意思是判断股票价格是否小于,如果这个标准改变了,那么只要修改这个规则文件,而不用去修改源代码了

iOS开发中isKindOfClass和isMemberOfClass的区别

       isKindOfClass和isMemberOfClass 都是NSObject的比较Class的方法

       ã€€ã€€ä½†ä¸¤ä¸ªæœ‰å¾ˆå¤§åŒºåˆ«:

       ã€€ã€€isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员

       ã€€ã€€isMemberOfClass只能确定一个对象是否是当前类的成员

       ã€€ã€€ä¾‹å¦‚:我们已经成NSObject派生了自己的类,isMemberOfClass不能检测任何的类都是基于NSObject类这一事实,而isKindOfClass可以。

       ã€€ã€€[[NSMutableData data] isKindOfClass:[NSData class]]; // YES

        [[NSMutableData data] isMemberOfClass:[NSData class]]; // NO

       å¸Œæœ›å¯¹ä½ æœ‰å¸®åŠ©

ios performselector 和 respondstoselector的区别

       respondsToSelector是实例方法也是类方法,用于判断某个类/实例是否能处理某个方法(包括基类方法)。conformsToProtocol:@protocol()是用来检查对象是否实现了指定协议类的方法. respondsToSelector相关的方法: -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例 -(BOOL) isMemberOfClass: classObj 用来判断是否是某个类的实例 -(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递) +(BOOL) instancesRespondToSelector: selector 用来判断实例是否有以某个名字命名的方法. 和上面一个不同之处在于, 前面这个方法可以用在实例和类上,而此方法只能用在类上. -(id) performSelector: selector SEL sel = @selector (start:) ; // 指定action if ([obj respondsToSelector:sel]) { //判断该对象是否有相应的方法 [obj performSelector:sel withObject:self]; //调用选择器方法 } 使用[[UIApplication sharedApplication] keyWindow]查找应用程序的主窗口对象 respondsToSelector判断是否实现了某方法 #import <Foundation/Foundation.h> @interface Tester : NSObject { } -(void) test:(NSString*) msg; -(void) notImp; @end Tester.m #import "Tester.h" @implementation Tester -(void) test:(NSString*) msg { NSLog(@"%@", msg); } @end 注意:没有实现notImp方法 main.m #import <Foundation/Foundation.h> #import "Tester.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; id tester = [[Tester alloc] init];//注意,这里使用id SEL testSelector = @selector(test:); SEL notImpSelector = @selector(notImp:); if([tester respondsToSelector:testSelector]) { //tester.m中实现了test方法 [tester test:@"invoke test method"]; } if([tester respondsToSelector:notImpSelector]) { //test.m中没有实现此主就去 [tester notImp]; } [pool drain]; return 0; } conformsToProtocol:@protocol()是用来检查对象是否实现了指定协议类的方法 //例子如下,在例子当中会有适当的注释,以助理解这个方法: @protocol MyProtocol - (void) doSomething; @end @interface MyClass : NSObject<MyProtocol>//直接符合协议的类 { } @end @implementation MyClass - (void) doSomething { } @end @interface MyOtherClass : MyClass//继承了符合协议的类,即其父类符合协议。 { } @end @implementation MyOtherClass - (void) doSomething { } @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; MyClass *obj_one = [MyClass new]; BOOL one_conforms = [obj_one conformsToProtocol:@protocol(MyProtocol)]; MyOtherClass *obj_two = [MyOtherClass new]; //obj_two是类的实例对象,和父类相关,其父类符合协议,则其亦符合。 BOOL two_conforms = [obj_two conformsToProtocol:@protocol(MyProtocol)]; NSLog(@"obj_one conformsToProtocol: %d", one_conforms);//output:YES NSLog(@"obj_two conformsToProtocol: %d", two_conforms);//output:YES [pool drain]; return 0; } //Output: obj_one conformsToProtocol: 1 obj_two conformsToProtocol: 1 //Whereas: MyOtherClass *obj_two = [MyOtherClass new]; //class_conformsToProtocol是只检查当前类符不符合协议,和其父类无关。 BOOL conforms_two = class_conformsToProtocol([obj_two class], @protocol(MyProtocol)); NSLog(@"obj_two conformsToProtocol: %d", conforms_two);//output:NO //Output: obj_two conformsToProtocol: 0 在代理调用是,检查其代理是否符合协议,或者使用 respondsToSelector 检查对象能否响应指定的消息, 是避免代理在回调时因为没有实现代理函数而程序崩溃的一个有效的方式

isKindOfClass和isMemberOfClass的区别

       ã€€ã€€isKindOfClass和isMemberOfClass 都是NSObject的比较Class的方法

       ã€€ã€€ä½†ä¸¤ä¸ªæœ‰å¾ˆå¤§åŒºåˆ«:

       ã€€ã€€isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员

       ã€€ã€€isMemberOfClass只能确定一个对象是否是当前类的成员

       ã€€ã€€ä¾‹å¦‚:我们已经成NSObject派生了自己的类,isMemberOfClass不能检测任何的类都是基于NSObject类这一事实,而isKindOfClass可以。

       ã€€ã€€[[NSMutableData data] isKindOfClass:[NSData class]]; // YES

        [[NSMutableData data] isMemberOfClass:[NSData class]]; // NO

       ä¾‹:

       - (void) testIsKindOfClass {

        Class1 *c1=[Class1 new];

        if ([c1 isKindOfClass: [NSObject class]]) {

        NSLog(@"c1 is a kind of NSObject.");

        }

        if ([c1 isMemberOfClass:[Class1 class]]) {

        NSLog(@"c1 is Member of Class1 !");

        }

        if (![c1 isMemberOfClass:[NSObject class]]) {

        NSLog(@"c1 is't Member of NSObject !");

        }

       }

       è¾“出结果;

       c1 is a kind of NSObject .

       c1 is Member of Class1 !

       c1 is't Member of NSObject !

更多内容请点击【百科】专栏

精彩资讯