Skip to content

Commit c2c4398

Browse files
authored
Fix unnecessary retains to prevent zombie Analytics instances (#164)
* Fixed memory leaks * Added leak testing * Removed unnecessary subscriber conformance from Timeline. * Some cleanup * Analytics property on plugins now needs to be marked `weak`. * Fixed leak test for linux.
1 parent 2b85609 commit c2c4398

31 files changed

+171
-48
lines changed

Examples/destination_plugins/AdjustDestination.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class AdjustDestination: NSObject, DestinationPlugin, RemoteNotifications {
4141
let timeline = Timeline()
4242
let type = PluginType.destination
4343
let key = "Adjust"
44-
var analytics: Analytics? = nil
44+
weak var analytics: Analytics? = nil
4545

4646
private var settings: AdjustSettings? = nil
4747

Examples/destination_plugins/ComscoreDestination.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class ComscoreDestination: DestinationPlugin {
4444
let timeline = Timeline()
4545
let type = PluginType.destination
4646
let key = "comScore"
47-
var analytics: Analytics? = nil
47+
weak var analytics: Analytics? = nil
4848

4949
private var comscoreSettings: ComscoreSettings?
5050
private var comscoreEnrichment: ComscoreEnrichment?

Examples/destination_plugins/ExampleDestination.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class ExampleDestination: DestinationPlugin {
4646
public let type = PluginType.destination
4747
// TODO: Fill this out with your settings key that matches your destination in the Segment App
4848
public let key = "Example"
49-
public var analytics: Analytics? = nil
49+
public weak var analytics: Analytics? = nil
5050

5151
private var exampleSettings: ExampleSettings?
5252

Examples/destination_plugins/FlurryDestination.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class FlurryDestination: DestinationPlugin {
4646
let timeline = Timeline()
4747
let type = PluginType.destination
4848
let key = "Flurry"
49-
var analytics: Analytics? = nil
49+
weak var analytics: Analytics? = nil
5050

5151
var screenTracksEvents = false
5252

Examples/destination_plugins/IntercomDestination.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class IntercomDestination: DestinationPlugin {
4343
let timeline = Timeline()
4444
let type = PluginType.destination
4545
let key = "Intercom"
46-
var analytics: Analytics? = nil
46+
weak var analytics: Analytics? = nil
4747

4848
private var intercomSettings: IntercomSettings?
4949
private var configurationLabels = [String: Any]()

Examples/other_plugins/CellularCarrier.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import CoreTelephony
5454
class CellularCarrier: Plugin {
5555
var type: PluginType = .enrichment
5656

57-
var analytics: Analytics?
57+
weak var analytics: Analytics?
5858

5959
func execute<T: RawEvent>(event: T?) -> T? {
6060
guard var workingEvent = event else { return event }

Examples/other_plugins/ConsentTracking.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import UIKit
4646
*/
4747
class ConsentTracking: Plugin {
4848
let type = PluginType.before
49-
var analytics: Analytics? = nil
49+
weak var analytics: Analytics? = nil
5050

5151
var queuedEvents = [RawEvent]()
5252

Examples/other_plugins/ConsoleLogger.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import Segment
4242
class ConsoleLogger: Plugin {
4343
let type = PluginType.after
4444
let name: String
45-
var analytics: Analytics? = nil
45+
weak var analytics: Analytics? = nil
4646

4747
var identifier: String? = nil
4848

Examples/other_plugins/IDFACollection.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import AppTrackingTransparency
4646
*/
4747
class IDFACollection: Plugin {
4848
let type = PluginType.enrichment
49-
var analytics: Analytics? = nil
49+
weak var analytics: Analytics? = nil
5050
@Atomic private var alreadyAsked = false
5151

5252
func execute<T: RawEvent>(event: T?) -> T? {

Examples/other_plugins/NotificationTracking.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import Segment
4040

4141
class NotificationTracking: Plugin {
4242
var type: PluginType = .utility
43-
var analytics: Analytics?
43+
weak var analytics: Analytics?
4444

4545
func trackNotification(_ properties: [String: Any], fromLaunch launch: Bool) {
4646
if launch {

0 commit comments

Comments
 (0)