用OBJC編程 2 - working with Objects
發(fā)送和接收消息@interface XYZPerson : NSObject
-(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.
}
通過參數(shù)傳遞對象-(void)saySomething:(NSString *)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];
向自己發(fā)送消息@implementation XYZPerson
-(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
動態(tài)創(chuàng)建對象// NSObject提供一個類方法, id like (NSObject *)
+(id)alloc;
//
-(id)init;
//=============== use it
NSObject *newObject = [[NSObject alloc] init];
// init可能返回一個和alloc不同的對象,因此最好嵌套使用alloc和init,不推薦如下使用
NSObjet *someObject = [NSObject alloc];
[someObject init];
初始化方法可以帶參數(shù)-(id)initWithInt:(int)value;
-(id)initWithLong:(long)value;
//------------------
NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];
類工廠方法提供了另一個選擇+(NSNumber *)numberWithInt:(int)value;
+(NSNumber *)numberWithLong:(long)value;
//------------------
NSNumber *magicNumber = [NSNumber numberWithInt:42];
使用new來代替XYZObject *object = [XYZObject new];
// 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);
OBJC 是一個動態(tài)語言// 下面代碼會產(chǎn)生運行時錯誤,因為NSString沒有removeAllObjects方法
id someObject = @"Hello, World!";
[someObject removeAllObjects];
// 下面代碼會產(chǎn)生編譯時錯誤
NSString *someObject = @"Hello, World!";
[someObject removeAllObjects];
比較對象// 因為是指針,所以可以這樣比較是否同一個對象
if(firstPerson == secondPerson){
// the same object
}
// 如果要比較數(shù)據(jù)是否相同,使用isEqual
if([firstPerson isEqual:secondPerson]) {
// is identical to second
}
使用nil// nil 是一個對象指針,聲明一個對象指針無需初始化,編譯器會初始化它為nil
XYZPerson *somePerson;
// ------------
if(somePerson != nil){
// ====
}
// or
if(somePerson){
// ===
}