【问题标题】:difference between session and _session (facebook integration)session 和 _session 之间的区别(facebook 集成)
【发布时间】: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;

【问题讨论】:

    标签: iphone ios facebook


    【解决方案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 是你的访问者。

      你可以写_sessionself.session,但不能写self._session或只写session

      但是_sessionself.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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-04-08
            • 1970-01-01
            • 2023-02-13
            • 2013-05-16
            • 1970-01-01
            • 1970-01-01
            • 2019-11-05
            • 2010-09-27
            相关资源
            最近更新 更多