How do I wait 1 second and then disable the objectpooling?

(i cant explain my problem properly so bear with me)

How do I wait 1 second and then disable the objectpooling? I have tried Invoke,WaitForSeconds and such but it will not get the variable ‘particles’ which makes it not able to be removed.

Here is my current script. It activates the ObjectPooling but I need a way to wait 1 second and then remove the ‘GameObject particles’ as if I just disable it, it just removes the particles,without it being seen.

void OnTriggerEnter2D(Collider2D other)
	{
		//coinClone = (GameObject) Instantiate (coinParticle, player.transform.position, player.transform.rotation);
		GameObject particles = particlesPool.GetPooledObject();
		ps = particles.GetComponent<ParticleSystem>();
		particles.transform.position = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z);
		particles.SetActive(true);
		if (other.gameObject.name == "plr_0") {
			theCoinGenerator.coinCount += coinsToGive;
			PlayerPrefs.SetInt ("Coins", theCoinGenerator.coinCount);
			gameObject.SetActive (false);
			if (coinSound.isPlaying) {
				coinSound.Stop ();
				coinSound.Play ();
			} else {	
				coinSound.Play ();
			}

			//Destroy (coinClone, 1);

			//this is where i'm supposed to set object active to false
		}
	}

the script is in a prefabbed coin which triggers when the player touches the coin
(what i mean by it wont detect variable particles)
101425-bug.png

i cant put it inside either because it just wont work.
i want to ObjectPool it because it lags quite a bit when I use destroy/instantiate

if this isn’t possible then how do I make my game load and render properly when changing scene to the main game. (my game stutters when it runs for the first time and it can get annoying to new players)

thanks in advance

I think you can just pass the particle to the function to disable it

void OnTriggerEnter2D(Collider2D other)
{
      GameObject particles = particlesPool.GetPooledObject();
      ps = particles.GetComponent<ParticleSystem>();
      particles.transform.position = new Vector3(player.transform.position.x, layer.transform.position.y, player.transform.position.z);
      particles.SetActive(true);
      if (other.gameObject.name == "plr_0") {
          theCoinGenerator.coinCount += coinsToGive;
          PlayerPrefs.SetInt ("Coins", theCoinGenerator.coinCount);
          gameObject.SetActive (false);
          if (coinSound.isPlaying) {
              coinSound.Stop ();
               coinSound.Play ();
           } else {    
              coinSound.Play ();
         }
     
          //Destroy (coinClone, 1);
     
          //this is where i'm supposed to set object active to false
          StartCoroutine(waitOneSecond(particles));
      }
 }

IEnumerator waitOneSecond(GameObject targetDisable)
{
    yield return new WaitForSeconds(1f);
    targetDisable.SetActive(false);
}