用OBJC編程 2 - working with Objects
用OBJC編程 2 - working with Objects
發(fā)送和接收消息
@interface XYZPerson : NSObject
-(void) sayHello;
@end
// implemetation
@implementation XYZPerson
- (void) sayHello{
NSLog(@"Hello, world!");
}
@end // XYZPerson
// -----
[somePerson sayHello];
-(void) sayHello;
@end
// implemetation
@implementation XYZPerson
- (void) sayHello{
NSLog(@"Hello, world!");
}
@end // XYZPerson
// -----
[somePerson sayHello];
通過指針keep對象
-(void)myMethod{
NSString *myString = // get a string from somewhere.
}
NSString *myString = // get a string from somewhere.
}
通過參數(shù)傳遞對象
-(void)saySomething:(NSString *)greeting;
// implementation
-(void)saySomething:(NSString *)greeting{
NSLog(@"%@", greeting); // "%@",用來打印對象
}
// implementation
-(void)saySomething:(NSString *)greeting{
NSLog(@"%@", greeting); // "%@",用來打印對象
}
通過返回值傳遞
-(NSString *)magicString;
//implementation
-(NSString *)magicString{
NSString *stringToReturn = // create string
return stringToReturn;
}
// use it
NSString *magic = [testString magicString];
//implementation
-(NSString *)magicString{
NSString *stringToReturn = // create string
return stringToReturn;
}
// use it
NSString *magic = [testString magicString];
向自己發(fā)送消息
@implementation XYZPerson
-(void)sayHello{
[self saySomething:@"Hello, world!"];
}
-(void)saySomething:(NSString *)greeting{
NSLog(@"%@", greeting);
}
@end
-(void)sayHello{
[self saySomething:@"Hello, world!"];
}
-(void)saySomething:(NSString *)greeting{
NSLog(@"%@", greeting);
}
@end
向父類發(fā)消息
@interface XYZShoutingPerson : XYZPerson
@end
/////////////////////
@implementation XYZShoutingPerson
-(void)saySomething:(NSString *)greeting{
NSString *uppercaseGreeting = [greeting uppercaseString];
[super saySomething:uppercaseGreeting];
}
@end
@end
/////////////////////
@implementation XYZShoutingPerson
-(void)saySomething:(NSString *)greeting{
NSString *uppercaseGreeting = [greeting uppercaseString];
[super saySomething:uppercaseGreeting];
}
@end
動(dòng)態(tài)創(chuàng)建對象
// NSObject提供一個(gè)類方法, id like (NSObject *)
+(id)alloc;
//
-(id)init;
//=============== use it
NSObject *newObject = [[NSObject alloc] init];
+(id)alloc;
//
-(id)init;
//=============== use it
NSObject *newObject = [[NSObject alloc] init];
// init可能返回一個(gè)和alloc不同的對象,因此最好嵌套使用alloc和init,不推薦如下使用
NSObjet *someObject = [NSObject alloc];
[someObject init];
NSObjet *someObject = [NSObject alloc];
[someObject init];
初始化方法可以帶參數(shù)
-(id)initWithInt:(int)value;
-(id)initWithLong:(long)value;
//------------------
NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];
-(id)initWithLong:(long)value;
//------------------
NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];
類工廠方法提供了另一個(gè)選擇
+(NSNumber *)numberWithInt:(int)value;
+(NSNumber *)numberWithLong:(long)value;
//------------------
NSNumber *magicNumber = [NSNumber numberWithInt:42];
+(NSNumber *)numberWithLong:(long)value;
//------------------
NSNumber *magicNumber = [NSNumber numberWithInt:42];
使用new來代替
XYZObject *object = [XYZObject new];
// is effectively the same as:
XYZObject *object = [[XYZObject alloc] init];
// is effectively the same as:
XYZObject *object = [[XYZObject alloc] init];
通過字面量創(chuàng)建
NSString *someString = @"Hello, world!";
// is same as
NSString *someString = [NSString stringWithCString:"Hello, world!" encoding:NSUTF8StringEncoding];
//=======
NSNumber *myBOOL = @YES;
NSNumber *myFloat = @3.14f;
NSNumber *myInt = @42;
NSNumber *myLong = @42L;
NSNumber *myInt2 = @(84 / 2);
// is same as
NSString *someString = [NSString stringWithCString:"Hello, world!" encoding:NSUTF8StringEncoding];
//=======
NSNumber *myBOOL = @YES;
NSNumber *myFloat = @3.14f;
NSNumber *myInt = @42;
NSNumber *myLong = @42L;
NSNumber *myInt2 = @(84 / 2);
OBJC 是一個(gè)動(dòng)態(tài)語言
// 下面代碼會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤,因?yàn)镹SString沒有removeAllObjects方法
id someObject = @"Hello, World!";
[someObject removeAllObjects];
// 下面代碼會(huì)產(chǎn)生編譯時(shí)錯(cuò)誤
NSString *someObject = @"Hello, World!";
[someObject removeAllObjects];
id someObject = @"Hello, World!";
[someObject removeAllObjects];
// 下面代碼會(huì)產(chǎn)生編譯時(shí)錯(cuò)誤
NSString *someObject = @"Hello, World!";
[someObject removeAllObjects];
比較對象
// 因?yàn)槭侵羔?,所以可以這樣比較是否同一個(gè)對象
if(firstPerson == secondPerson){
// the same object
}
// 如果要比較數(shù)據(jù)是否相同,使用isEqual
if([firstPerson isEqual:secondPerson]) {
// is identical to second
}
if(firstPerson == secondPerson){
// the same object
}
// 如果要比較數(shù)據(jù)是否相同,使用isEqual
if([firstPerson isEqual:secondPerson]) {
// is identical to second
}
使用nil
// nil 是一個(gè)對象指針,聲明一個(gè)對象指針無需初始化,編譯器會(huì)初始化它為nil
XYZPerson *somePerson;
// ------------
if(somePerson != nil){
// ====
}
// or
if(somePerson){
// ===
}
XYZPerson *somePerson;
// ------------
if(somePerson != nil){
// ====
}
// or
if(somePerson){
// ===
}
posted on 2013-11-19 23:11 cuigang 閱讀(271) 評論(0) 編輯 收藏 引用 所屬分類: OBJC