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 |
+(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;
}