ios - 方法未被调用

标签 ios objective-c

我已将一个按钮链接到以下方法:

- (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/

相关文章:

ios - 出现错误 : "_OBJC_CLASS_$__TtC10ChartsDemo12XYMarkerView" in Charts,

ios - Swift:我想知道我单击的按钮的索引路径行是什么?

objective-c - 带有包含 NSManagedObjectID 的 NSPredicate 的 NSFetchRequest 是否可以安全地跨线程边界传递?

objective-c - iTunes Connect 不要求更新屏幕截图?

objective-c - 在 iOS 的 Objective-C 中创建带有完成 block 的可中断动画?

objective-c - 为什么某些 UIViewController 属性在未使用 viewDidLoad 设置时变为 nil?

objective-c - 设置相对于设备尺寸的自动布局约束

ios - 我如何一次只允许屏幕上出现一个 SKSpriteNode 实例?

iphone - 未调用区域委托(delegate)方法的 CLLocationManger

ios - 使用 OCMock 期待来自非实例化变量的方法调用