I cannot remove observers that I register
<p>I am registering some observers in my application to show a controller when timeout occurs:</p>

<pre><code>for(Ad* ad in ads){
    if(ad.published){
        [ad resetTimer];
        [[NSNotificationCenter defaultCenter] removeObserver:ad name:@"TouchBegan" object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:ad selector:@selector(resetTimer) name:@"TouchBegan" object:nil];
    }
}
</code></pre>

<p>In Ad class, I try to remove observers in dealloc:</p>

<pre><code>-(void) dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"TouchBegan" object:nil];
}
</code></pre>

<p>But it seems that there still exists an observer after dealloc. </p>

<p>Ads array is a property of a Shop class:</p>

<pre><code>@property(nonatomic, strong) NSArray&lt;Ad&gt;* ads;
</code></pre>

<p>How I can completely remove observers that I register?</p>