【发布时间】:2013-10-29 01:41:31
【问题描述】:
假设我在我的类MyClassName 中定义了一个名为myPropertyName 的属性。这篇文章通篇使用手动内存管理。
MyClassName.h
#import <UIKit/UIKit.h>
@interface MyClassName : NSObject {
@private
NSObject* myPropertyName;
@public
}
@property (nonatomic, retain) NSObject* myPropertyName;
// Some methods prototypes are here
@end
MyClassName.m
#import "MyClassName.h"
@implementation MyClassName
@synthesize myPropertyName;
// Some methods are here
@end
我对 myPropertyName 声明的位置、实例变量之间的区别等用法感到困惑。比如初始化代码这三个语句有什么区别,比如我的类myClassName自定义的-(void)init方法中。
-
self.myPropertyName = [[[NSObject alloc] init] autorelease];这个调用
myPropertyNamesetter,但我不确定setter中使用的实例变量的名称是什么,myPropertyName(因为我已经声明了一个名为myPropertyName的@private字段)还是_myPropertyName(有人说这个带下划线的是默认的)? -
myPropertyName = [[NSObject alloc] init];这会初始化
myPropertyName属性的实例变量吗?如果我没有@synthesize myPropertyName = _myPropertyName;,会不会出错,因为属性的默认实例变量据说是_myPropertyName。 -
_myPropertyName = [[NSObject alloc] init];即使我使用
@synthesize myPropertyName;和@private NSObject* myPropertyName;,_myPropertyName是否仍被声明为我的属性myPropertyName的实例变量?
在我的理解中,属性只是一个名字(如myPropertyName),代码中应该有一些实例变量被封装后用于实际操作,如赋值等。
【问题讨论】:
-
您不再需要
@synthesize。关于似乎是您的实际问题,您可以有一个@property而没有相应的ivar。
标签: objective-c properties ivar