我下载了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;
答案 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是你的变量。会话是你的访问者。
您可以撰写_session
或self.session
但不能写self._session
或session
。
但是_session
和self.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