session和_session之间的区别(facebook整合)

时间:2011-11-23 10:25:31

标签: iphone ios facebook

我下载了facebook集成的代码......我的应用程序工作得很好..

我只是想知道会话 _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;

4 个答案:

答案 0 :(得分: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(因为这将释放任何现有对象),这将使您免于内存管理的负担。

答案 1 :(得分:0)

您的属性几乎总是有一个支持变量。什么

@synthesize session = _session; 声明您的搜索栏的支持变量将被称为_session。这允许您将属性的名称与变量的名称分离。实际上,如果你不使用@synthesize,你根本不需要一个支持变量。

避免与变量名称冲突 当我使用局部变量时以及当我使用实例变量时,请说清楚。

答案 2 :(得分:0)

_session是你的变量。会话是你的访问者。

您可以撰写_sessionself.session但不能写self._sessionsession

但是_sessionself.session并没有做同样的事情。 self.session使用属性params调用生成的getter或setter。

对于非原子样本,保留生成类似的setter:

- (void) setSession:(FBSession*)session
{
  if(_session != session) {
    [_session release];
    _session = [session retain];
  }
}

此代码为您管理内存。如果直接使用_session,则永远不会释放旧值(并泄漏),并且不保留新值。

会话前_表示此变量是私有的,您无需直接访问

答案 3 :(得分:0)

如您所见,有一个名为session属性和一个名为_session实例变量。属性已自动生成访问者(如果他们@synthesize)。可以使用点语法(self.session)或使用setter和getter([self setSession:yourSession] / [self session]来访问它们。此属性使用backstore(因为属性不存储信息)他们自己,只提供一个访问数据的接口,名为_session。这些访问器负责内存管理,所以你应该只使用这些。

够了等等:大多数时候,如果你有财产,你应该使用它。因此,在代码中使用self.session代替_session

有关始终着名的iOS开发人员库中的属性的更多信息:The Objective-C Programming Guide