目标C的新手:需要帮助理解强引用和分配

时间:2012-04-24 05:11:07

标签: objective-c ownership

第一篇文章。对不起,如果我搞砸了代码规则。我正在尝试从Big Nerd Ranch Guide学习Objective C.我将发布处理强引用的示例。

#import <Foundation/Foundation.h>

@interface Asset : NSObject
{
  NSSTRING *label;
  unsigned int resaleValue;
}
@property (strong) NSString *label;
@property unsigned int resaleValue;
@end

所以基本上NSString需要强引用,而int则不需要。我知道NSString是一个对象,我已经读过如果没有指定任何变量,则赋予赋值的属性。

因此,如果赋值足以保持像某个int这样的东西被释放,直到拥有它的对象被释放,那么为什么保持Asset对象中的NSString对象不被释放是不够的呢?最后,我想我仍然对分配在引用计数方面的作用与强大的内容(或者我应该说保留,因为这是ARC中的强大替代)感到困惑。

1 个答案:

答案 0 :(得分:1)

strong == to std :: shared_ptr如果你来自C ++

强烈声明在分配期间必须分别保留和释放对象。

-(void)assign:(id) b to:(id) a {
    if( b ){
      [b retain];
    }
    if ( a ){
      [a release];
    }
    a = b;

}

要回答第二个问题,Objective-C对象的大小不像结构那样定义。因此,obj-C类不能按价值持有。

因此,编译为obj-c的obj-c类中的所有数据将始终具有存储在其中的普通旧数据类型,因为它们的大小可以确定为固定的。

考虑一个8字节的缓冲区;

前4个字节用于你的int,第二个4个字节是你的指针,因为有一个可变长度的字符串会在运行时改变对象的大小,你会看到它不起作用,一个字符串被分配在堆并分配给您的指针。