Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7598759
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 30, 20262026-05-30T22:29:18+00:00 2026-05-30T22:29:18+00:00

Working off an idea from the Big Nerd Ranch guide to iOS programming, I’m

  • 0

Working off an idea from the Big Nerd Ranch guide to iOS programming, I’m trying to define singleton object in the following manner:

@implementation ImageStore

static ImageStore *defaultImageStore = nil;

- (id)init
{
    if (defaultImageStore) {
        return defaultImageStore;
    }

    self = [super init];
    if (self) {
        dictionary = [[NSMutableDictionary alloc] init];
    }

    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter addObserver:self selector:@selector(clearCache) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];

    return self;
}

+ (id)allocWithZone:(NSZone *)zone
{
    return [self defaultImageStore];
}

+ (ImageStore *)defaultImageStore
{
    if (!defaultImageStore) {
        defaultImageStore = [[super allocWithZone:NULL] init];
    }
    return defaultImageStore;
}

This works fine, but the analyzer complains about allocWithZone, saying

Object with +0 retain counts returned to caller where a +1 (owning) retain count is expected

I think the code is just tricking the analyzer and that what’s happening is OK, but is there a better model to do what I’m trying to do?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-30T22:29:19+00:00Added an answer on May 30, 2026 at 10:29 pm

    I don’t bother with all that stuff. This is my pattern:

    @implementation MyClass

    -(id) init { ... } /* normal init */
    
    +(MyClass*) defaultMyClass
    {
        static MyClass* theObject = nil;
        @synchronized([MyClass class])  // remove synchronzed block in single threaded app
        {
            if (theObject == nil)
            {
                theObject = [[self alloc] init];
            }
        }
        return theObject;
    }
    

    Possbily you can hide the initialiser in a class extension so that it is documented that you shouldn’t use it.

    There’s also the GCD method (the below is stolen from Rob Napier’s link) which is actually more lightweight.

    + (id) defaultMyClass
    {
        static dispatch_once_t pred;
        static MyClass* theObject = nil;
    
        dispatch_once(&pred, ^{ theObject = [[self alloc] init]; });
        return theObject;
    }
    

    I’ve always resisted the GCD pattern because to my eye it looks less obvious what is happening. However, that’s nothing that can’t be fixed with a comment! The locks used by GCD are more lightweight in comparison to @synchronized, so this will be faster.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I've been working on and off with a team that's developing an iPhone app.
First off, I'm working on an app that's written such that some of your
First off I should say that I don't have any experience in working with
I'm working with large numbers that I can't have rounded off. Using Lua's standard
First off, let me start by saying that I am totally new to working
I'm working on an app that grabs and installs a bunch of updates off
Say I'm currently working on a new feature which I've branched off of the
I am working on a shopping site and I am trying to calculate the
I'm working on a mobile app that will get data from GAE, and I'm
i'm trying to get working an old rails 2.1 application configured with mongrel cluster.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.