Lehetőségeit tekintve a C nyelvhez nagyon hasonló metódusokat definiálhatunk, ám szintaktikailag meglehetősen kevés megegyezés fedezhető fel. Az Objective-C metódusainak szignatúrája a következő formájú :
A metódus típusa mondja meg, hogy az eljárás osztály szintű (+) vagy példány szintű (-). A visszatérési típus határozza meg a metódus visszatérési típusát. Amennyiben void lenne, azaz nincs visszatérési értéke, úgy eljárásnak definiáltuk a metódust - minden más esetben függvénynek.
A C nyelvhez hasonlóan itt is csak érték szerinti átadást végezhetünk ténylegesen. Természetesen itt is lehetőség van, hogy paraméterként pointert adjunk át, amivel ezen korlátokat átléphetjük.
A C nyelvű megoldáshoz hasonlóan itt is három pont jelzi, ha nem tudjuk előre megadni a paraméterek számát. A paramétereken való végigiterálást egy típus és három makró segíti: Mindhárom makró a va_list típus segítségével működik. A va_start makró állítja be a a paraméterek elejére a listát, A va_arg makró segítségével továbbléphetünk a következő paraméterre. Itt meg kell adnunk a paraméter típusát is. Alapvetően Objective C-ben majdnem minden pointer így akkor sem fogunk elcsúszni, ha nem típushelyesen hívták meg a függvényt (a fordító nem tudja megmondani előre, hogy a függvényünket milyen típusú paraméterekkel kell meghívni!). Egyedüli problémánk csúszással akkor lehet, ha double-t, vagy hozzá hasonló nem pointer méretű típust használunk. Végül a va_end makró zárja le a listát.
A példában szereplő függvény meghívása:
Lehetőség van önálló fordítási egységek létrehozására. A C nyelvhez hasonló módon ez fej- és implementációs állományból tevődik össze. A fejállományok .h, míg a megvalósítást tartalmazó fájl .m kiterjesztésűek. Fejállományra az alábbi módon hivatkozhatunk:
Az #import annyiban különbözik az Objective C-ben is használható #include-tól, hogy egy fájlt csak egyszer nyit meg, így nincs szükség az #include-nál megszokott őrszemekre a header állományok elején.
Mivel ebben a nyelvben megtalálhatóak az osztályok, ezért a fejállományba helyezzük el az @interface direktívához tartozó részt, ami lényegében az osztály deklarálása. Az @implementation részt a megvalósítási állományba helyezzük, ahol a fejállományban deklaráltakat implementáljuk.