Objective-C知识点滴记录

1、方法调用基本语法
   [object method];
   [object methodWithInput:input];
   方法可以有返回值:
   output = [object methodWithOutput];
   output = [object methodWithInputAndOutput:input];
   还可以调用累方法:
   id myStr = [NSString string];
   id类型意味着myStr可以是任意类型的对象。
   或者:NSString* myStr = [NSString string];
   注意:在对象类型的右边有一个星号(*),在Objective-C中所有的对象变量都是指针类型,id类型已经被预定义为指针类型,所以不需要加一个星号。

2、方法嵌套调用
   在许多编程语言中,嵌套的方法或函数是这样调用的:
   function1(function2()); //function2()的返回值作为参数传递给function1()。
   在Objective-C中,嵌套的方法或函数调用:
   [NSString stingWithFormat:[prefs format]];
   要尽量避免在一行语句中进行两层以上的嵌套,这样会使代码的可读性降低。

3、多个输入参数的方法定义
   在Objective-C中,一个方法的名字可以被拆分成几段:
   - (BOOL) writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
   你可以这样调用这个方法:
   BOOL result = [myDate writeToFile:@"/tmp/log.txt" atomically:NO];
   这些不是命名参数。在运行中,该方法的名字实际上是:writeToFile:atomically:

4、点操作符
   在Mac OS X 10.5中,Objective-C 2.0新增了点操作符的设置器(setter)和获取器(getter):
   user.name = @"Mike"; //[user setName:@"Mike"];
   output = user.name;   //output = [user name];
   区别:点语法只能使用在设置器(setter)和获取器(getter)上,而不能用于普通方法!

5、在Nil上调用方法
   在Objective-C中,nil对象的作用等同于其他语言的NULL指针。 不同的地方在于,在nil上调用方法不会导致程序崩溃或抛出异常。

6、类的创建
   在Objective-C语法中,一个类通常分为两部分:类的接口(头文件)和类的实现。
   类的接口(interface)通常存放在类似ClassName.h的文件中,在这里我们定义实例变量和公用方法(public)。
   类的实现存放在ClassName.m这样的文件中,它实现了接口中定义的方法。通常还可以定义外面不能访问的私有方法(private)。
   User.h
   --------------------
   #import <Cocoa/Cocoa.h>
   @interface User : NSObject
    {
         NSString* username;
         NSString* password;
    }
    - (NSString*) username;
    - (NSString*) password;
    - (void) setUsername:(NSString*) input;
    - (void) setPassword:(NSString*) input;
    @end
  
   User.m
   --------------------
   #import "User.h"
   @implemention User
   - (NSString*) username
   {
         return username;
   } 
   - (NSString*) password
   {
         return password;
   }
   - (void) setUsername:(NSString*) input
   {
         [username autorelease];
         username = [input retain];
   }
   - (void) setPassword:(NSString*) input
   {
         [password autorelease];
         password = [input retain];
   }
   @end
   在Objective-C中,get这个词有着特殊含义,获取器(getter)是不带get前缀的。方法前面的减号(-)表示这是一个实例方法,如果方法名前面是个加号(+),表示这是一个类方法。
   释放一个对象有两种方法:release和autorelease。标准的release会立即释放对象的引用,autorelease直到当前方法结束才会释放(除非你添加自定义的代码来明确的改变它)。

7、类目(Category)
   类目是Objective-C中最有用的一个特性。类目允许你为一个已存在的类添加一些方法,而不用子类化该类,也不需要你了解该类的实现细节。
   例如:我想给NSString添加一个方法,判断它是不是一个URL,写法如下:
   NSString-NSStringHelper.h
   -------------------------------
   #import <Cocoa/Cocoa.h>
   @interface NSString (NSStringHelper)
    - (BOOL) isURL;
   @end
   这很像一个类的声明,不同的地方在于后面没有列出父类,并且在括号里写了类目的名字。
类目的名字可以随便取,但最好能表达出你在类目中包含的方法所要做的事。
   #import "NSString-NSStringHelper.h"
   @implemention NSString (NSStringHelper)
    - (BOOL) isURL
    {
          if ([self hasPrefix:@"http://"])
               return YES;
          else
               return NO;
    }
   @end
    现在你可以使用NSString的这个方法了:
    NSString* str1 = @"http://www.iteye.com";
    NSString* str2 = @"HelloWorld";
    if ([str1 isURL])
         NSLog(@"str1 is a URL.");
    if ([str2 is URL])
         NSLog(@"str2 is a URL");


内容更新中。。。。。

你可能感兴趣的:(Objective-C,mac)