[C/OC的那点事儿]Objective-c[易错点]: getSet方法、异常处理、类归属判断

1.setGet方法

上午在学程序的过程中,突然发现我在使用set方法的时候出现了N多线程.我立马就想到了我的程序进入了死循环了.结果不出我所料---

原因:对方法和赋值认识不清楚.

实例如下:

int number;

-(int)number  //错误的写法

{

 return self.number; //self.number 的意思是:调用本class中的number方法.结果我就进入了无限的循环了.

}


正确的写法:

-(int)number

{

 return number;

//或者 return self->number;

}

-(void)setNumber:(int)num //错误的写法

{

  self.number = num;  //这也是同样的问题.错误

      // 正确的写法

  number = num;

//或者  self->number = num;   

}


2.异常的处理  -NSException

   步骤:

     NSException *e = [我们建立的exception实例  exceptionWithName:@"实例exception", reason:@"…",userInfo:nil];

@throw e;

返回:

实例exception:


真实代码:

#import <Foundation/Foundation.h>

@interface GunException : NSException

@end

#import "GunException.h"

@implementation GunException

@end

-(void)setNumberOfBullet:(int)_numberOfBullet
{
    NSException *e;
    if (_numberOfBullet < 0 || _numberOfBullet >100) {
        e = [GunException exceptionWithName:@"gunException" reason:@"_numberOfBullet < 0 || _numberOfBullet >100" userInfo:nil ];
        
        @throw e;
        
    }
    self->numberOfBullet = _numberOfBullet;
}

直接就中断了: Terminating app due to uncaught exception 'gunException', reason: '_numberOfBullet < 0 || _numberOfBullet >100'


-(BOOL) isKindOfClass: classObj

is object a descendent or member of classObj 此物件是否是 classObj 的子孫或一員

-(BOOL) isMemberOfClass: classObj

is object a member of classObj 此物件是否是 classObj 的一員

-(BOOL) respondsToSelector: selector

does the object have a method named specifiec by the selector
此物件是否有叫做 selector 的 method

+(BOOL) instancesRespondToSelector: selector

does an object created by this class have the ability to respond to the specified selector 此物件是否是由有能力回應指定 selector 的物 件所產生

-(id) performSelector: selector

invoke the specified selector on the object 喚起此物件的指定 selector


#import "Square.h"

 #import "Rectangle.h" 

#import <stdio.h>

int main( int argc, const char *argv[] ) {
Rectangle *rec = [[Rectangle alloc] initWithWidth: 10 height: 20];
 Square *sq = [[Square alloc] initWithSize: 15];

// isMemberOfClass

// true
if ( [sq isMemberOfClass: [Square class]] == YES ) {

printf( "square is a member of square class\n" ); }

// false
if ( [sq isMemberOfClass: [Rectangle class]] == YES ) {

printf( "square is a member of rectangle class\n" ); }

// false
if ( [sq isMemberOfClass: [NSObject class]] == YES ) {

printf( "square is a member of object class\n" ); }

// isKindOfClass

// true
if ( [sq isKindOfClass: [Square class]] == YES ) {

printf( "square is a kind of square class\n" ); }

// true
if ( [sq isKindOfClass: [Rectangle class]] == YES ) {

printf( "square is a kind of rectangle class\n" ); }

// true
if ( [sq isKindOfClass: [NSObject class]] == YES ) {

printf( "square is a kind of object class\n" ); }

// respondsToSelector

// true
if ( [sq respondsToSelector: @selector( setSize: )] == YES ) {

printf( "square responds to setSize: method\n" ); }

// false
if ( [sq respondsToSelector: @selector( nonExistant )] == YES ) {

printf( "square responds to nonExistant method\n" ); }

// true
if ( [Square respondsToSelector: @selector( alloc )] == YES ) {

printf( "square class responds to alloc method\n" ); }

// instancesRespondToSelector

// false
if ( [Rectangle instancesRespondToSelector: @selector( setSize: )] == YES ) {

printf( "rectangle instance responds to setSize: method\n" ); }

// true
if ( [Square instancesRespondToSelector: @selector( setSize: )] == YES ) {

printf( "square instance responds to setSize: method\n" ); }

// free memory [rec release]; [sq release];

return 0;

} 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值