iOS Interview Questions ( Part 1 )

Kerem Demir
5 min readFeb 10, 2024

--

Merhaba! Bu makale serisi, iOS geliştiricileri için önemli bir kaynak olacak. Her bölümde, iOS mülakatlarında sıkça karşılaşılan ve başarılı performans için kritik olan üç soruyu ele alacağız. Amacımız, mülakatlara hazırlanan geliştiricilere rehberlik etmek ve iOS platformunda başarılı bir kariyer hedefleyenlere değerli ipuçları sağlamaktır.

Bu makale serisi kapsamında, iOS mülakatlarında sıkça karşılaşılan ve önemli olarak kabul edilen üç temel konuyu ele alacağız. İlk olarak, Swift programlama dilinde temel kavramlar olan struct ve class arasındaki farkları inceleyeceğiz. Ardından, Storyboard ile arayüzler oluşturulurken sıkça kullanılan IBOutlet ve IBAction’a odaklanacağız. Son olarak, uygulamaların yaşam döngüsünü yöneten ve temel işlevleri gerçekleştiren AppDelegate’in rolünü keşfedeceğiz. Her konuyu açıklarken, kavramların daha iyi anlaşılmasını sağlamak için örneklerle destekleyeceğiz. Şimdi, iOS Geliştiricilerin bilgisini artırmak için bu önemli konulara detaylı bir şekilde dalalım!

1-) Swift Struct ve Class arasındaki farklar nelerdir ?

Struct (Yapı) :

  • Struct’lar değer tipleridir.
  • Genellikle küçük ve basit veri yapıları için kullanılırlar.
  • Kod içinde dolaştırıldıklarında, struct’lar kopyalanır, bu nedenle her örnek kendi benzersiz kopyasına sahiptir.
  • Diğer struct’lardan özellikler veya işlevsellik miras alamazlar.

Class (Sınıf) :

  • Class’lar referans tipleridir.
  • Daha karmaşık veri yapıları ve nesneler için kullanılırlar.
  • Class’lar referansla geçirilir, bu nedenle birden çok referans aynı örneğe işaret edebilir.
  • Süper sınıftan alt sınıflara özellikler ve işlevsellik mirasını desteklerler.

Swift’te, struct’lar ve class’lar benzer amaçlar için kullanılabilir, ancak temel farklılıklar bulunmaktadır:

  • Değer Tipleri ve Referans Tipleri : Struct’lar değer tipleridir, class’lar ise referans tipleridir. Bu, bir struct’ı başka bir struct’a atadığınızda değerlerin kopyalandığı, class’lar için ise referansların kopyalandığı anlamına gelir.
  • Yansıma ve Kalıtım : Struct’lar miras almayı desteklemez ve yansıma yeteneklerine sahip değildir. Bununla birlikte, class’lar hem kalıtımı hem de yansımayı destekler.
  • Yıkıcı (Deinitializer) : Class’lar yıkıcı yöntemlere sahiptir, oysa struct’lar bu özelliği desteklemez.

Kod :

// Struct Örneği
struct Nokta {
var x: Int
var y: Int
}

// Class Örneği
class Kisi {
var ad: String
var yas: Int

init(ad: String, yas: Int) {
self.ad = ad
self.yas = yas
}
}

var nokta1 = Nokta(x: 10, y: 20)
var nokta2 = nokta1
nokta2.x = 30

var kisi1 = Kisi(ad: "John", yas: 30)
var kisi2 = kisi1
kisi2.ad = "Alice"

print(nokta1) // Çıktı: Nokta(x: 10, y: 20)
print(nokta2) // Çıktı: Nokta(x: 30, y: 20)

print(kisi1.ad) // Çıktı: Alice
print(kisi2.ad) // Çıktı: Alice

2-) IBOutlet ve IBAction ne anlama gelir ve nasıl kullanılır ?

IBOutlet ve IBAction, arayüz dosyalarını (Storyboard veya XIB) Swift koduna bağlamak için kullanılan özel işaretlerdir.

  • IBOutlet : IBOutlet, bir arayüz öğesinin (UIButton, UILabel, UITextField vb.) bir Swift kodundaki bir değişkenle ilişkilendirilmesi için kullanılır. Bu, koddan arayüz öğelerine erişim sağlar.
  • IBAction : IBAction, bir arayüz öğesinin olayının bağlanmasında kullanılır (UIButton, UIBarButtonItem vb.), örneğin bir düğmeye tıklama gibi, bir Swift yöntemine. Bu, etkileşimlerin kodda işlenmesini sağlar.

Kod :

class ViewController: UIViewController {

@IBOutlet weak var myLabel: UILabel! // Arayüz yüklenirken, etkileşime geçilecek öğeler burada tanımlanır.

override func viewDidLoad() {
super.viewDidLoad()
// Arayüz yüklendiğinde yapılacak işlemler buraya yazılır.
}

@IBAction func buttonTapped(_ sender: UIButton) {
myLabel.text = "Butona tıklandı!" // Butona tıklandığında yapılacak işlemler burada tanımlanır.
}
}

Bu örnekte, @IBOutlet ile bir UILabel örneği olan myLabel oluşturulur ve Interface Builder’daki bir etiketle bağlantı kurulur. Ek olarak, @IBAction ile buttonTapped adında bir yöntem oluşturulur ve bir UIButton’a bağlanır. Bu, düğmeye tıklandığında myLabel etiketinin güncellenmesine olanak sağlar.

3-) Bir iOS uygulamasında AppDelegate’in amacı nedir ?

AppDelegate, iOS uygulamalarının yaşam döngüsünü yöneten ve sistem olaylarını işleyen bir sınıftır. Bu sınıf, uygulama başladığında, durakladığında ve sonlandığında çağrılan özel yöntemleri içerir.

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Uygulama başlatıldığında burada herhangi bir kurulum görevi yapılır.
// Örnek: Kullanıcı oturumunu kontrol etmek ve otomatik giriş yapmak.
// Örnek: Kullanıcı tercihlerini yüklemek ve uygulama arayüzünü buna göre yapılandırmak.
// Örnek: Uygulama temalarını yüklemek.

return true
}

func applicationWillResignActive(_ application: UIApplication) {
// Uygulama etkin durumdan etkinsiz duruma geçmeden önce burada görevler gerçekleştirilir.
// Örnek: Video oynatmayı duraklatmak.
// Örnek: Animasyonları duraklatmak.
// Örnek: Oyunlarda oyun akışını duraklatmak.
}

func applicationDidEnterBackground(_ application: UIApplication) {
// Uygulama arka plana girdiğinde burada görevler gerçekleştirilir.
// Örnek: Veri kaydetme (örneğin, kullanıcının oturum açtığı sayfayı veya yerel verileri kaydetme).
// Örnek: Arka plan görevlerini başlatma (örneğin, bildirim alma veya konumu izleme).
}

func applicationWillEnterForeground(_ application: UIApplication) {
// Uygulama ön plana çıkmadan önce burada görevler gerçekleştirilir.
// Örnek: Kullanıcıyı giriş yapmaya yönlendirme.
// Örnek: Kullanıcıya önemli güncelleme mesajlarını gösterme.
// Örnek: Devam eden arka plan görevlerini kontrol etme.
}

func applicationDidBecomeActive(_ application: UIApplication) {
// Uygulama etkin hale geldiğinde burada görevler gerçekleştirilir.
// Örnek: Uygulamadaki son kullanılan ekranı geri getirme.
// Örnek: Devam eden arka plan görevlerini kontrol etme ve gerekirse yeniden başlatma.
// Örnek: Kullanıcı oturumunu kontrol etme ve otomatik giriş yapma.
}

func applicationWillTerminate(_ application: UIApplication) {
// Uygulama sonlandırılmadan önce burada görevler gerçekleştirilir.
// Örnek: Son durumdaki verileri kaydetme (örneğin, kullanıcının son bir eylem gerçekleştirdiği sayfayı veya yerel verileri kaydetme).
// Örnek: Devam eden arka plan görevlerini sonlandırma.
}

// UISceneSession Lifecycle

func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Yeni bir sahne oturumu oluşturulduğunda çağrılır.
// Yeni sahneyi oluşturmak için bir yapılandırmayı seçmek için bu yöntemi kullanın.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}

func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Kullanıcı bir sahne oturumunu atarsa çağrılır.
// Eğer uygulama çalışmıyorken atılan bir oturum varsa, bu yöntem application:didFinishLaunchingWithOptions'dan kısa bir süre sonra çağrılır.
// Atılan sahnelerle ilgili özel kaynakları serbest bırakmak için bu yöntemi kullanın, çünkü onlar geri dönmeyecekler.
}
}

Bu örnekte, AppDelegate sınıfı, uygulamanın başlatılması, arka plana alma, öne çıkma, etkin hale gelme ve sonlandırılması gibi çeşitli yaşam döngüsü olaylarını yönetmek için kullanılan yöntemleri içerir. Bu yöntemler, uygulama durumuyla ilgili çeşitli işlevleri gerçekleştirmek için kullanılabilir.

Bu makale serisi, iOS geliştiricileri için önemli bir kaynak olacaktır. Her bölümde, iOS mülakatlarında sıkça karşılaşılan ve başarılı performans için kritik olan üç soruyu ele alacağız. Amacımız, mülakatlara hazırlanan geliştiricilere rehberlik etmek ve iOS platformunda başarılı bir kariyer hedefleyenlere değerli ipuçları sağlamaktır.

Makalenin sonunda, bu temel konuları daha iyi anlaşılması için örneklerle destekleyerek detaylı bir şekilde ele alacağız. Bu, iOS Geliştiricilerin bilgisini artırmak için önemli alanlara detaylı bir şekilde girmemizi sağlayacak.

Ayrıca, bu makale serisinin devamı olarak, her hafta yeni bir bölüm yayınlanacaktır. Bu yüzden gelecek hafta burada “iOS Mülakat Soruları (Bölüm 2)” başlıklı bir makale bulacaksınız. Her yeni bölüm, iOS geliştiricilerin mülakat süreçlerine hazırlanırken faydalanabilecekleri yeni sorular ve ipuçlarını sunacaktır. Her hafta yeni içerikler için takipte kalın!

Bu makalelerin, iOS geliştirme yolculuğunuzda değerli bir kaynak olmasını ve mülakat süreçlerinde başarıya ulaşmanıza yardımcı olmasını umuyoruz. Aynı zamanda, bu kaynağın başlangıç ​​seviyesindeki kullanıcılar için de rehberlik edici bir kaynak olmasını diliyoruz!

Hepinize başarılı geliştirmeler dileriz !

İngilizce versiyonunu kontrol edebilirsiniz.

iOS Interview Questions ( Part 2 ) için takip etmeyi unutmayın!

Beni GitHub’ta Takip Et : https://github.com/keremdemirios

Beni LinkedIn’de Takip Et : https://www.linkedin.com/in/kerem-demir-b31a69190/

--

--