Gaz*_*zer 36 iphone objective-c
我知道@synthesize window;结合@property'自动创建'你的setter和getter,但我不确定当你分配一个像这样的值时会发生什么
@synthesize searchBar = _searchBar;
Run Code Online (Sandbox Code Playgroud)
这是否意味着我可以简单地在我的方法中使用_searchBar而不是说self.searchBar?
是否使用此委托方法防止ivar名称的冲突:
- (void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
Run Code Online (Sandbox Code Playgroud)
它是否相当于self.searchBar而不是searchBar或者那两个相同?
kub*_*ubi 32
您的属性几乎总是有一个支持变量.什么
@synthesize searchBar = _searchBar;
Run Code Online (Sandbox Code Playgroud)
声明会调用搜索栏的支持变量_searchBar.这允许您将属性的名称与变量的名称分离.事实上,如果您不使用@synthesize,则根本不需要支持变量.
至于为什么人们这样做,每个人都有不同的理由.就个人而言,我这样做
mma*_*alc 18
语法在文档中描述 - 请参阅属性实现指令.
更改实例变量名称的原因正是为了阻止直接访问.约定使用下划线.(注意:虽然编码指南目前警告不要使用下划线,但此建议已过时.)
根据文档(请参阅使用访问器方法),除了init和dealloc方法之外,您应该始终使用访问器方法.您可以使用set访问器来确保正确管理内存,并在适当时发出KVO更改通知.您使用get访问器来确保正确初始化该属性.有几个常见的地方懒惰地初始化属性; 如果你不使用访问者,你会得到零...
直接访问的示例:使用其中一个核心数据模板,如果您使用:
NSFetchRequest *request = ...;
NSError *error = nil;
NSArray *results = [__managedObjectContext executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)
代替
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)
然后 - 因为托管对象上下文是在访问器方法中懒惰创建的 - 您最终可能会向nil发送消息并且没有结果.
hot*_*aw2 17
@synthesize searchBar = _searchBar;
Run Code Online (Sandbox Code Playgroud)
说为实例变量_searchBar制作名为"searchBar"(等)的getter方法.
_searchBar变量的下划线通常意味着"除非你真的知道你在做什么,否则不要直接访问我.请改用getter和setter方法!".
| 归档时间: |
|
| 查看次数: |
12550 次 |
| 最近记录: |