Vis*_*hnu 1 iphone objective-c
我是Objective的新手.当我阅读许多教程时,@ property有一个类型的变量,同样的变量也在@inferface中声明.这需要吗?
例
@interface MyInterface : NSObject
{
NSInteger myVaribale;
}
@property(retain) NSInteger myVariable;
Run Code Online (Sandbox Code Playgroud)
这里myVariable在这两个地方都被声明了.
从iOS 4开始,你就可以写了
@interface MyInterface : NSObject {
}
@property(assign) NSInteger myVariable;
@implementation MyInterface
@synthesize myVariable;
@end
Run Code Online (Sandbox Code Playgroud)
这意味着你可以在接口声明中省略NSInteger myVaribale,只要你在.m中合成它(合成将创建setter,getter和实例变量)
缺点是你不会在Xcode的调试器中看到myVariable的值.
作为注释,@property如果要将属性声明为ivar的不可变类型,则声明中对ivar类型的重新声明也很有用,例如:
@interface MyClass : NSObject
{
NSMutableArray *myArray;
}
@property (retain) NSArray *myArray;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,ivar实际上存储为a NSMutableArray,因此可以在对象的生命周期中进行更改.
但是这是一个内部细节,如果你不想"广告"是可变的(可更改的),你可以使属性的类型为不可变类型 - 在本例中为NSArray.
虽然这实际上不会阻止使用返回的数组作为可变的其他代码,但这是一个很好的约定,并通知其他代码它不应该以这种方式处理它.
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |