我已将一个按钮链接到以下方法:
- (IBAction)searchButton
{
NSString *searchText = _searchField.text;
NSLog(@"lol");
[_search testSearch:searchText];
}
最后一行在名为 search 的对象中调用方法 testSearch,定义如下:
@property (strong, nonatomic) Search *search;
在搜索中,testSearch 定义如下:
-(void)testSearch:(NSString *)testString
{
NSLog(@"HELLO");
}
当我点击搜索时,我的最终输出只是“lol”(每次我点击按钮)。它不会像 testSearch 应该做的那样打印“HELLO”。我在 Search.h 中包含了 testSearch,所以它应该可以访问...为什么不调用此方法?
最佳答案
您应该首先在指定的初始化程序(或在 viewDidLoad
或其他一些“用户”中将您的 _search
ivar 初始化为 Search
的实例将使用这种“方法”)。
- init {
if ((self = [super init])) {
_search = [[Search alloc] init];
}
return self;
}
出于各种原因,通常应避免在 getter 方法中进行延迟初始化:
它添加了不必要的代码;使用
@property
和默认的合成实现。导致代码更简单,更少。执行惰性初始化的 getter 会产生导致突变的 getter。这是不一致的,当调用 getter 时看到 KVO 更改通知是很奇怪的(当然,除非你不触发 KVO 通知......此时,你有不可观察的突变)。
导致突变的 getter 本质上不是线程安全的,除非您添加代码(棘手的代码)来实现它。
惰性初始化通常是过早的优化。除非您有因“过早”初始化资源而导致的可识别内存或 CPU 性能问题,否则增加惰性初始化的复杂性是白费力气。
惰性初始化会导致奇怪的顺序依赖性和其他复杂性。有一个已知的入口点来初始化子系统比依赖子系统 X 在 Y 之前初始化要好得多,两者都有副作用。
关于ios - 方法未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095452/