How to destroy an object that is not moused over?

Basically I have a script attached to my grass tiles that spawns a square outline over it when the mouse is hovered on it.
I need to know how to make the spawned object disappear when the mouse is taken away, I’ve made an attempt at this using OnMouseExit(); However, when you move the mouse too fast the mouse leaving the object is not detected and the outline remains on the object until you hover over it and remove the mouse again.

attached is my script that attempts to remove the tiles.

using UnityEngine;
using System.Collections;

public class GridTile : MonoBehaviour {

	public bool IsMouseOver;

	
	void Update(){
		if (IsMouseOver == false) {
			//byetile deletes square outline
			ByeTile();
		}
	}

	void OnMouseOver()
	{
		IsMouseOver = true;
	}
	void OnMouseExit()
	{
		IsMouseOver = false;
		Debug.Log ("set to false");
	}
	

	public void ByeTile()
	{
		Destroy (gameObject);
	}
}

Hey mate, creating and destroying a new outline tile each time the user mouses over a tile seems like a
inefficient way to accomplish this. What I would suggest is having one outline tile that moves with the mouse. Also instead of OnMouseExit() which, as you’ve found out, is unreliable you can shoot a ray from the camera to the mouse and see what is is above. Alternatively you could have each tile have its own outline tile as a child object and change it to active or inactive depending on the mouse position.

public Transform outlineTile;

void Update()
{
    RaycastHit hit;
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    
    if (Physics.Raycast(ray, out hit)) 
    {
         if(hit.gameObject.GetComponent<GridTile>())
         {
              outlineTile.setActive(true);
              outlineTile.position = hit.transform.position;
         }
         else
         {
             outlineTile.setActive(false);
         }

     }
}

This script would be on a game manager of sorts, not on each tile.