Pass strings by ref (save copy)
diff --git a/include/rive/artboard.hpp b/include/rive/artboard.hpp
index 3dcf69c..2306890 100644
--- a/include/rive/artboard.hpp
+++ b/include/rive/artboard.hpp
@@ -122,7 +122,7 @@
         bool isTranslucent(const LinearAnimation*) const;
         bool isTranslucent(const LinearAnimationInstance*) const;
 
-        template <typename T = Component> T* find(std::string name) {
+        template <typename T = Component> T* find(const std::string& name) {
             for (auto object : m_Objects) {
                 if (object != nullptr && object->is<T>() && object->as<T>()->name() == name) {
                     return reinterpret_cast<T*>(object);
@@ -138,11 +138,11 @@
         std::string stateMachineNameAt(size_t index) const;
 
         LinearAnimation* firstAnimation() const;
-        LinearAnimation* animation(std::string name) const;
+        LinearAnimation* animation(const std::string& name) const;
         LinearAnimation* animation(size_t index) const;
 
         StateMachine* firstStateMachine() const;
-        StateMachine* stateMachine(std::string name) const;
+        StateMachine* stateMachine(const std::string& name) const;
         StateMachine* stateMachine(size_t index) const;
 
         /// Make an instance of this artboard, must be explictly deleted when no
@@ -173,10 +173,10 @@
         ArtboardInstance() {}
 
         std::unique_ptr<LinearAnimationInstance> animationAt(size_t index);
-        std::unique_ptr<LinearAnimationInstance> animationNamed(std::string name);
+        std::unique_ptr<LinearAnimationInstance> animationNamed(const std::string& name);
 
         std::unique_ptr<StateMachineInstance> stateMachineAt(size_t index);
-        std::unique_ptr<StateMachineInstance> stateMachineNamed(std::string name);
+        std::unique_ptr<StateMachineInstance> stateMachineNamed(const std::string& name);
     };
 } // namespace rive
 
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 91437b0..85302b9 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -478,7 +478,7 @@
     return m_Animations.front();
 }
 
-LinearAnimation* Artboard::animation(std::string name) const {
+LinearAnimation* Artboard::animation(const std::string& name) const {
     for (auto animation : m_Animations) {
         if (animation->name() == name) {
             return animation;
@@ -501,7 +501,7 @@
     return m_StateMachines.front();
 }
 
-StateMachine* Artboard::stateMachine(std::string name) const {
+StateMachine* Artboard::stateMachine(const std::string& name) const {
     for (auto machine : m_StateMachines) {
         if (machine->name() == name) {
             return machine;
@@ -600,7 +600,7 @@
     return la ? std::make_unique<LinearAnimationInstance>(la, this) : nullptr;
 }
 
-std::unique_ptr<LinearAnimationInstance> ArtboardInstance::animationNamed(std::string name) {
+std::unique_ptr<LinearAnimationInstance> ArtboardInstance::animationNamed(const std::string& name) {
     auto la = this->animation(name);
     return la ? std::make_unique<LinearAnimationInstance>(la, this) : nullptr;
 }
@@ -610,7 +610,7 @@
     return sm ? std::make_unique<StateMachineInstance>(sm, this) : nullptr;
 }
 
-std::unique_ptr<StateMachineInstance> ArtboardInstance::stateMachineNamed(std::string name) {
+std::unique_ptr<StateMachineInstance> ArtboardInstance::stateMachineNamed(const std::string& name) {
     auto sm = this->stateMachine(name);
     return sm ? std::make_unique<StateMachineInstance>(sm, this) : nullptr;
 }