My app freezes at the yield statement, I guess...

In my app. I have many game objects with the script below.
The code is…

....
IEnumerator Explosion() {
    GameObject exp = (GameObject)Instantiat(expEffect, transform.position, transform.rotation);
    MeshRenderer render = exp.GetComponent<MeshRenderer>();
    for (int i = 1; i < 7; i++) {
        yield return new WaitForSeconds(0.3f);
        if (isObjectDestroyed) break;
        render.material.mainTexture = effect_image*;*

}
Destroy(exp);
}

The bool variable (isObjectDestroyed) is checked when the object(this script is attached) is destroyed.
The app sometimes freezes at the yield statement if the object is destroyed, I guess.
Even though I check if the object is destroyed every 0.3 second, if the object is destroyed right after the yield starts, then this script is also destroyed and the yield has no place to return and makes the app freezing.
That’s what I’m thinking.
Maybe I can check it every frame using ‘yield return null’ and it might be safer, but it causes poor performance. Am I right and if so, any workaround for this situation?
Any comments will be so appreciated. Thanks for reading.

that will simply not work, isObjectDestroyed will NEVER be true, why? because when the object gets destroyed, it will not continue after the yield instruction. but even if it continue… if you destroy the instance of the object, you simple CANT access properties from the instance you have already destroyed, you need to check why the app is working, since maybe there are errors being printed