13

For my first time using Xcode I was following a tutorial online. I did everything as the tutorial showed me, but I am afraid that it's too outdated.

The error I encounter is:

[font_attributes release]; 

'release' is unavailable: not available in automatic reference counting mode

ARC forbids explicit message send of 'release'

My knowledge on Cocoa and Xcode is limited, but I still wish to expand my learning.

How may I fix the ARC issue?

Aleksander Azizi
  • 9,829
  • 9
  • 59
  • 87
cbbcbail
  • 1,651
  • 4
  • 16
  • 27
  • Possible duplicate of: http://stackoverflow.com/questions/6273341/under-automatic-reference-counting-why-are-retain-release-and-dealloc-not-all – 0x8badf00d Nov 23 '11 at 03:04
  • 1
    This is caused by the current version of Xcode enabling Automatic Reference Counting for all new projects. ARC is new in Xcode 4.2 and older tutorials will assume you are using manual reference counting. The answer by @NJones has the fix. – Rob Keniger Nov 23 '11 at 05:22

2 Answers2

47

The two options given by NJones are valid and effective ways of dealing with ARC incompatibility. However, you do have a third option. Disabling ARC for specific files.

Giving the flags -fno-objc-arc to your non ARC compatible compile sources affectively marks them as such upon compilation.

You can find your compile sources under TargetsYour AppBuild PhasesCompile Sources.

Community
  • 1
  • 1
Aleksander Azizi
  • 9,829
  • 9
  • 59
  • 87
29

You have two options:

1) Turn off ARC for this project. This is done by setting 'Objective-C Automatic Reference Counting' to NO in the 'Build Settings' tab of your target in the project page.

2) Remove all retain release autorelease NSAutoReleasePools and retainCount calls, since ARC makes them for you. With the exception of NSAutoReleasePools They have been replaced by @autorelease{}.

The second option has been automated by apple see this question to use the refactoring tool.

Community
  • 1
  • 1
NJones
  • 27,139
  • 8
  • 70
  • 88