【objective-c】学习积累(learning objective-c)

来源:互联网 发布:win7远程桌面连接mac 编辑:程序博客网 时间:2024/06/05 17:45

1、objective-c中对象的指针与非指针有什么区别?如指针调用是:[id message],那么非指针怎么调用?


2、对多个参数的声明和使用还不是很清楚


3、几个特殊对象

    id:object的指针,可表示一切对象的指针

    nil:空指针,调用空指针不会有任何效果,也不会导致异常

    self:相当于this指针

    super:指向父类


    self与super的区别:self指向真正的对象,有内存空间,可以作为参数被调用。但super不是一个真正的对象


4、SEL

     message通常被认为是一个seelctor 或者 message selector。而SEL则用来表示一个selector。

    如aObject有一个方法aMessage,则可以如下定义:

         SEL aSelector = @selector(aMassage)

或者:  SEL aSelector = @selector(aMessage:)   //如果aMessage有参数,那么后面就要带冒号,这两个aSelector是不一样的


     SEL使message能动态地在消息表达式中使用,NSObject定义了以下接口:

                    (id) performSelector: (SEL)aSelector

      以下两种方式效果一样:

      [aObject aMessage]

      [aObject performSelector: @selector (aMessage)]          //但这种使用方式没有什么增益,一般不这么用


     performSelector的用处在于能够动态调用不同的message:

 BOOL isHighlightDraw = ...
SEL shapeDrawingSelector;
if ( isHighlightDraw )
{
shapeDrawingSelector = @selector( drawHighlighted );
}
else
{
shapeDrawingSelector = @selector( draw );
}
...
Shape *aShape = ...
[aShape performSelector: shapeDrawingSelector];


5、respondsToSelector:判断一个对象是否能够响应一个message

id anObject = ... // object that conforms to a protocol
SEL optionalSelector = @selector( optionalMethod );
if ( [anObject respondsToSelector: optionalSelector] )          //通过判断,避免调用anObject无法响应的消息,造成崩溃
{
[anObject optionalMethod];
}


6、objective-c中使用函数调用方式:IMP,相当于一个函数指针,可以像C语言一样采用函数调用的方式(function call)


7、引用计数

10 - (void) setGreetingText: (NSString*) newText
11 {
12 [newText retain];                //引用加+,防止newText被释放
13 [greetingText release];    //引用-1,
14 greetingText = newText;
15 }


     当对象创建时,计数初始化为1。当计数为0时,在内存回收前会调用对象的dealloc()方法。因此可以重写该方法,在里面release对象用到的实例变量,防止内存泄露。

     记得重写dealloc()方法时,在方法的最后一定要调用[ super dealloc],否则无法调用父类的dealloc,导致父类中定义的变量产生泄露


原创粉丝点击