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 是你的访问者。

你可以写_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

【讨论】:

以上是关于session 和 _session 之间的区别(facebook 集成)的主要内容,如果未能解决你的问题,请参考以下文章

PHP 中的 session_unset 和 unset($_SESSION) 有啥区别? [关闭]

PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别

Hibernate Session和EntityManager之间的区别[重复]

cookie session token 之间的区别

Session.Abandon与Session.Clear之间的区别

session和cookie的区别