关闭

[Objective-C] self 和 this 的区别

1239人阅读 评论(0) 收藏 举报

参考:

http://stackoverflow.com/questions/3810824/difference-b-w-objective-cs-self-and-cs-this

http://stackoverflow.com/questions/2385980/objective-c-when-to-use-self


【self 和 this 的区别】


this 是 C++ 语言的关键字,而 self 只是一个变量名。this 永远是当前对象的指针,而 self 的值是可以被修改的,在构造器中,当构造失败时,可以 self = nil,以标记失败,子类在调用 self = [super init] 发现 self 为 nil 时,就不必继续做自己的构造了。

可以定义变量名为 self,但对 this 是不可以的。

Objc 的 self 未必和 this 是等价的,即 self 未必指向当前对象,在使用时要注意。


【什么情况下用 self,什么情况下不用 self】


在  Apple's iPhone 'Utility Aplication' template 中出现的下列代码,

- (void)applicationDidFinishLaunching:(UIApplication *)application {

 MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
 self.mainViewController = aController;
 [aController release];

 mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
 [window addSubview:[mainViewController view]];
 [window makeKeyAndVisible];

}
其中,既有 self.mainViewController = aController; 的用法,又有 mainViewController.view.frame = [UIScreen mainScreen].applicationFrame; 的用法,有人会问,什么情况下用 self,什么情况下不用 self?


答案是:


用了 self.xxx 就会调用 [self getXXX] 或 [self setXXX](看是lvalue or  rvalue)。例如


1)

self.mainViewController = aController;
等价于

[self setMainViewController:aController];
即,通过 setter 函数来改变 mainViewController 指针的值,其中可能会涉及到诸如”releasing old objects, retaining new ones, updating internal variables“的操作


2)而

mainViewController = aController;
还是它自己,只是简单的直接改变 mainViewController 指针的值,不经由 setter 方法。

3)

mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
会被翻译成

[[mainViewController view] setFrame:[[UIScreen mainScreen] applicationFrame]];


建议的做法:

尽量用 [self setMainViewController:aController]; 的方式,尽量不用 mainViewController = aController; 的方式。原因在于:it's still possible that accessing directly could break something in a future version of Cocoa Touch

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2712581次
    • 积分:23622
    • 等级:
    • 排名:第274名
    • 原创:158篇
    • 转载:596篇
    • 译文:0篇
    • 评论:202条
    最新评论