session 和 _session 之间的区别(facebook 集成)
Posted
技术标签:
【中文标题】session 和 _session 之间的区别(facebook 集成)【英文标题】:difference between session and _session (facebook integration) 【发布时间】:2011-11-23 10:25:31 【问题描述】:我下载了 facebook 集成的代码……我的应用程序运行良好……
我只想知道session和_session有什么区别
还有 loginDialog 和 _loginDialog
感谢您的帮助...:)
@interface MyFbViewController :UIViewController <FBSessionDelegate, FBRequestDelegate>
FBSession* _session;
FBLoginDialog *_loginDialog;
@property (nonatomic, retain) FBSession *session;
@property (nonatomic, retain) FBLoginDialog *loginDialog;
@end
在 MyFbViewController.m 文件中............
@synthesize session = _session;
@synthesize loginDialog = _loginDialog;
【问题讨论】:
【参考方案1】:_session
和_loginDialog
是类的实例变量。因此,您完全负责内存管理(即保留和释放)这些变量,就像对任何其他变量一样。
属性 session 和 loginDialog 结合synthesize
语句生成两个类属性,它们又只是特殊的选择器。
@synthesize session = _session;
基本上会生成两个方法,- (FBSession *)session;
和 - (void)setSession:(FBSession *)newSession;
,只要您对对象属性使用点符号(即object.session
),就会调用它们。您可以自己编写它们并省略合成,但很少这样做,因为您将再次负责内存管理。
由于这些属性是retain
属性,因此自动生成的方法会处理必要的保留/释放内容,可能如下所示:
- (FBSession *)session
return _session;
- (void)setSession:(FBSession *)newSession
if (newSession != _session)
[_session release];
[newSession retain];
_session = newSession;
只要您在完成后将属性设置为nil
,就可以将您从内存管理的负担中解放出来(因为这将释放任何现有对象)。
【讨论】:
【参考方案2】:_session 是你的变量。 session 是你的访问者。
你可以写_session
或self.session
,但不能写self._session
或只写session
。
但是_session
和self.session
并没有做同样的事情。 self.session
使用属性参数调用生成的 getter 或 setter。
对于样本非原子,保留生成一个像这样的设置器:
- (void) setSession:(FBSession*)session
if(_session != session)
[_session release];
_session = [session retain];
此代码为您管理内存。如果您直接使用 _session,则永远不会释放(和泄漏)旧值,并且不会保留新值。
会话前的_表示这个变量是私有的,你不能直接访问它
【讨论】:
【参考方案3】:您的属性几乎总是有一个支持变量。什么
@synthesize 会话 = _session; 确实是声明搜索栏的支持变量将被称为_session。这允许您将属性名称与变量名称分离。事实上,如果你不使用@synthesize,你根本不需要有一个支持变量。
避免与变量名冲突 当我使用局部变量和使用实例变量时,请明确说明。
【讨论】:
【参考方案4】:如您所见,有一个名为session
的属性和一个名为_session
的实例变量。属性已自动生成访问器(如果您@synthesize
他们)。可以使用点语法 (self.session
) 或使用 setter 和 getter ([self setSession:yourSession]
/ [self session]
) 访问它们。此属性使用后台存储(因为属性本身不存储信息,它们只是提供访问数据的接口)命名为_session
。这些访问器负责内存管理,因此您应该只使用它们。
废话少说:大多数时候,如果您有财产,就应该使用它。所以在你的代码中使用self.session
而不是_session
。
更多关于著名的 ios 开发者库中的属性:The Objective-C Programming Guide
【讨论】:
以上是关于session 和 _session 之间的区别(facebook 集成)的主要内容,如果未能解决你的问题,请参考以下文章
PHP 中的 session_unset 和 unset($_SESSION) 有啥区别? [关闭]
PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别
Hibernate Session和EntityManager之间的区别[重复]